Advertisement
Guest User

Untitled

a guest
Feb 20th, 2017
64
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 0.87 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2.  
  3. using namespace std;
  4.  
  5. using ll = long long;
  6.  
  7. ll getAt(ll x, ll cl, ll cr, ll pos) {
  8. if (cl == cr && cl == pos) {
  9. return x;
  10. }
  11.  
  12. ll mid = cl + (cr - cl)/2;
  13. if (mid == pos) {
  14. return x&1;
  15. }
  16.  
  17. if (pos < mid) {
  18. return getAt(x/2, cl, mid - 1, pos);
  19. } else {
  20. return getAt(x/2, mid + 1, cr, pos);
  21. }
  22. }
  23.  
  24. int main(int argc, char **argv) {
  25. // ios::sync_with_stdio(false);
  26. srand(time(0));
  27.  
  28. #ifndef ONLINE_JUDGE
  29. freopen("/home/acarus/input.txt", "r", stdin);
  30. #endif
  31.  
  32. ll n, l, r;
  33. scanf("%lld %lld %lld", &n, &l, &r);
  34. --l, --r;
  35.  
  36. ll s = log(n)/log(2);
  37. ll ss = 1ll;
  38. for (int i = 0; i < s; ++i) {
  39. ss = ss * 2 + 1;
  40. }
  41.  
  42. ll cl = 0, cr = ss - 1;
  43. ll ans = 0ll;
  44. for (ll i = l; i <= r; ++i) {
  45. ans += getAt(n, cl, cr, i);
  46. }
  47. printf("%lld\n", ans);
  48. return 0;
  49. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement