TheAnshul

BIT

Sep 26th, 2018
129
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.44 KB | None | 0 0
  1. /***************************************************************************
  2.  * #######                    #                                            *
  3.  *    #     #    #  ######   # #    #    #   ####   #    #  #    #  #      *
  4.  *    #     #    #  #       #   #   ##   #  #       #    #  #    #  #      *
  5.  *    #     ######  #####  #     #  # #  #   ####   ######  #    #  #      *
  6.  *    #     #    #  #      #######  #  # #       #  #    #  #    #  #      *
  7.  *    #     #    #  #      #     #  #   ##  #    #  #    #  #    #  #      *
  8.  *    #     #    #  ###### #     #  #    #   ####   #    #   ####   ###### *
  9.  ***************************************************************************/
  10. #include<bits/stdc++.h>
  11. #define ll          long long
  12. #define pb          push_back
  13. #define endl        '\n'
  14. #define pii         pair<ll int,ll int>
  15. #define vi          vector<ll int>
  16. #define all(a)      (a).begin(),(a).end()
  17. #define F           first
  18. #define S           second
  19. #define sz(x)       (ll int)x.size()
  20. #define hell        1000000007
  21. #define rep(i,a,b)  for(ll int i=a;i<b;i++)
  22. #define lbnd        lower_bound
  23. #define ubnd        upper_bound
  24. #define bs          binary_search
  25. #define mp          make_pair
  26. using namespace std;
  27. #define N  100005
  28. ll tree[N];
  29. ll MaxVal;
  30. ll BitMask;
  31. ll read(ll idx)
  32. {
  33.     ll sum=0;
  34.     while(idx>0)
  35.     {
  36.         sum+=tree[idx];
  37.         idx-=(idx & -idx);
  38.     }
  39.     return sum;
  40. }
  41. void update(ll idx,ll val)
  42. {
  43.     while(idx<=MaxVal)
  44.     {
  45.         tree[idx]+=val;
  46.         idx+=(idx & -idx);
  47.     }
  48. }
  49. ll readSingle(ll idx)
  50. {
  51.     ll sum=tree[idx];
  52.     if(idx>0)
  53.     {
  54.         ll z=idx-(idx & -idx);
  55.         idx--;
  56.         while(idx!=z)
  57.         {
  58.             sum-=tree[idx];
  59.             idx-=(idx & -idx);
  60.         }
  61.     }
  62.     return sum;
  63. }
  64. void scale(ll c)
  65. {
  66.     for(ll i=1;i<=MaxVal;i++)
  67.     tree[i]=tree[i]*c;
  68. }
  69. ll find(ll cumFre)
  70. {
  71.     ll idx=0;
  72.     ll fBitMask=BitMask;
  73.     while(fBitMask!=0 && idx<MaxVal)
  74.     {
  75.         ll tIdx=idx+fBitMask;
  76.         if(cumFre==tree[tIdx])
  77.         return tIdx;
  78.         else if(cumFre>tree[tIdx])
  79.         {
  80.             idx=tIdx;
  81.             cumFre-=tree[tIdx];
  82.         }
  83.         fBitMask>>=1;
  84.     }
  85.     if(cumFre!=0)
  86.         return -1;
  87. }
  88. int main()
  89. {
  90.     ios_base::sync_with_stdio(false);
  91.     cin.tie(0);
  92.     cout.tie(0);
  93.     int TESTS=1;
  94. //  cin>>TESTS;
  95.     while(TESTS--)
  96.     {
  97.         ll a[]={2, 1, 1, 3, 2, 3, 4, 5, 6, 7, 8, 9};
  98.         MaxVal=12;
  99.         BitMask=8;
  100.         rep(i,1,MaxVal+1)
  101.         {
  102.             for(ll j=i;j>(i & -i);j--)
  103.                 tree[i]+=a[j];
  104.         }
  105.         cout<<read(6)<<endl;
  106.         // update(4,6);
  107.         scale(3);
  108.         cout<<readSingle(6)<<endl;
  109.         cout<<read(6);
  110.     }
  111.     return 0;
  112. }
Add Comment
Please, Sign In to add comment