Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <algorithm>
- #include <bitset>
- #include <chrono>
- #include <complex>
- #include <cstdlib>
- #include <iomanip>
- #include <iostream>
- #include <istream>
- #include <map>
- #include <ostream>
- #include <random>
- #include <set>
- #include <sstream>
- #include <string>
- #include <utility>
- #include <vector>
- using namespace std;
- typedef unsigned long long ull;
- class Solution {
- public:
- void solve(std::istream& in, std::ostream& out) {
- ull n, l, r; in >> n >> l >> r;
- if (r < l) {
- out << 0 << endl;
- return;
- }
- ull res = solve(n, (r-n)/2);
- if (l > n)
- res -= solve(n, (l-1-n)/2);
- out << res << endl;
- }
- map<pair<ull, ull>, ull> mem;
- ull solve(ull n, ull r) {
- if (n == 0)
- return 1;
- auto it = mem.find({n, r});
- if (it != mem.end())
- return it->second;
- ull res = solve(n / 2, r / 2);
- if ((n & 1) && r > 0)
- res += solve(n / 2 + 1, (r - 1) / 2);
- mem.insert(it, {{n, r}, res});
- return res;
- }
- };
- void solve(std::istream& in, std::ostream& out)
- {
- out << std::setprecision(12);
- Solution solution;
- solution.solve(in, out);
- }
- #include <fstream>
- #include <iostream>
- int main() {
- ios_base::sync_with_stdio(0);
- cin.tie(0);
- istream& in = cin;
- ostream& out = cout;
- solve(in, out);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement