Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // OK first tour region 17-18 B
- # include <iostream>
- # include <cmath>
- using namespace std;
- uint64_t pow2(uint64_t n) {
- uint64_t left = 1;
- uint64_t right = min(n, static_cast<uint64_t>(1'000'000'001));
- while (right - left > 1) {
- uint64_t mid = (left + right) / 2;
- if (mid * mid > n) {
- right = mid;
- } else {
- left = mid;
- }
- }
- return left;
- }
- uint64_t pow2_ceil(int64_t n) {
- if (n < 1) {
- return 1;
- }
- uint64_t left = 1;
- uint64_t right = min(n, static_cast<int64_t>(1'000'000'000));
- while (right - left > 1) {
- uint64_t mid = (left + right) / 2;
- if (mid * mid < n) {
- left = mid;
- } else {
- right = mid;
- }
- }
- return right;
- }
- int main() {
- int64_t a, b, k;
- cin >> a;
- cin >> b;
- cin >> k;
- int64_t res = 0;
- uint64_t pow_a = pow2_ceil(a);
- uint64_t pow_b = pow2(b);
- for (int64_t i = 1; i * i * i <= b; i++) {
- if (i * i * i < a) continue;
- int64_t left = max(pow2_ceil(i * i * i - k), pow_a);
- int64_t right = min(pow2(i * i * i + k), pow_b);
- res += max(right - left + 1, static_cast<int64_t>(0));
- }
- cout << res;
- return 0;
- }
Add Comment
Please, Sign In to add comment