Guest User

Untitled

a guest
May 19th, 2020
102
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.17 KB | None | 0 0
  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. #define ll long long
  4. #define rep(i,a,n) for(ll i=a;i<n;i++)
  5. #define rev(i,n,a) for(ll i=n-1;i>=a;i--)
  6. #define f first
  7. #define s second
  8. #define vll vector<ll>
  9. #define vvll vector<vector<ll>>
  10. #define vpii vector<pair<int,int>>
  11. #define vpll vector<pll>
  12. #define pll pair<ll,ll>
  13. #define secreterror() ios_base::sync_with_stdio(false);cin.tie(NULL);
  14.  
  15. #define N 1000001
  16. ll BIT[N][32];
  17.  
  18. void update(ll pos,ll id,ll val){
  19.     for(ll i=pos;i<N;i+=i&(-i)){
  20.         BIT[i][id]+=val;
  21.     }
  22. }
  23. ll query(ll id,ll idx){
  24.     ll ans=0;
  25.     for(ll j=id;j>=1;j-=j&(-j)){
  26.         ans+=BIT[j][idx];
  27.  
  28.     }
  29.     return ans;
  30. }
  31.  
  32. void solve(){
  33.  
  34.     ll n,q;
  35.     cin>>n>>q;
  36.  
  37.    
  38.     vector<ll>arr(n);
  39.  
  40.     rep(i,0,n){
  41.         cin>>arr[i];
  42.  
  43.         // count set bit in x;
  44.         ll cnt=0;
  45.         for(ll j=0;j<32;j++){
  46.  
  47.             if(arr[i]&(1<<j))
  48.             {
  49.                 update(i+1,j,1);
  50.             }
  51.  
  52.         }
  53.        
  54.  
  55.     }
  56.     while (q--)
  57.     {
  58.         ll type;
  59.         cin>>type;
  60.  
  61.         if(type==1){
  62.             ll x,i;
  63.             cin>>x>>i;
  64.  
  65.             ll del=0;
  66.  
  67.             for(ll j=0;j<30;j++){
  68.                 if(arr[i-1]&(1<<j)){
  69.                     update(i,j,-1);
  70.                 }
  71.             }
  72.             for(ll j=0;j<30;j++){
  73.                 if(x&(1<<j)){
  74.                     update(i,j,1);
  75.                 }
  76.             }
  77.         }
  78.         else
  79.         {
  80.             string s;
  81.             ll l,r;
  82.             cin>>s>>l>>r;
  83.  
  84.             ll temp[32]={0};
  85.             // cout<<"heAre"<<endl;
  86.  
  87.             for(ll i=0;i<28;i++){
  88.                 temp[i]=query(r,i);
  89.             }
  90.             for(ll i=0;i<28;i++){
  91.                 temp[i]=temp[i]-query(l-1,i);
  92.             }
  93.             //  cout<<"heAre"<<endl;
  94.  
  95.             ll ans=0;
  96.             if(s=="OR"){
  97.                 // cout<<"here"<<endl;
  98.                 for(ll i=0;i<28;i++){
  99.                     ll one=temp[i];
  100.                     ll zero=(r-l+1)-one;
  101.  
  102.                     ll tot=one+zero;
  103.                     ll pair=tot*(tot-1);
  104.                     pair=pair/2;
  105.                     pair=pair-((zero)*(zero-1))/2;
  106.                     ans+=(1<<i)*pair;
  107.                 }
  108.  
  109.             }
  110.             else if(s=="XOR"){
  111.                 for(ll i=0;i<28;i++){
  112.                     ll one=temp[i];
  113.                     ll zero=(r-l+1)-one;
  114.                     ll pair=one*zero;
  115.                     ans+=(1<<i)*pair;
  116.  
  117.                 }
  118.  
  119.             }
  120.             else
  121.             {
  122.                 for(ll i=0;i<28;i++){
  123.                     ll one=temp[i];
  124.                     ll zero=(r-l+1)-one;
  125.                     ll pair=(one)*(one-1);
  126.                     pair=pair/2;
  127.                     ans+=(1<<i)*pair;
  128.                 }
  129.                
  130.             }
  131.             if(l!=r)
  132.             cout<<ans<<endl;
  133.             else
  134.             {
  135.                 cout<<"0"<<endl;
  136.             }
  137.            
  138.            
  139.         }
  140.        
  141.     }
  142.    
  143.    
  144. }
  145.  
  146.  
  147. int main()
  148. {
  149.     secreterror()
  150.     // ll t;
  151.     // cin>>t;
  152.     //while(t--){
  153.         solve();
  154.        
  155.     //}
  156.  
  157. }
Add Comment
Please, Sign In to add comment