Anon2005

Aint

Sep 10th, 2019
285
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.59 KB | None | 0 0
  1. #include <iostream>
  2. #include <cstdio>
  3. using namespace std;
  4. unsigned int rez,v[100001],vec[400001];
  5. bool ok=0;
  6. void aint(unsigned int nod,unsigned int a,unsigned int b)
  7. {
  8.     if(a==b)
  9.     {
  10.         vec[nod]=v[a];
  11.         return;
  12.     }
  13.     aint(2*nod,a,(a+b)/2);
  14.     aint(2*nod+1,(a+b)/2+1,b);
  15.     vec[nod]=vec[2*nod]&vec[2*nod+1];
  16. }
  17. void query(unsigned int nod,unsigned int a,unsigned int b,unsigned int ua,unsigned int ub)
  18. {
  19.     if(a>=ua&&b<=ub)
  20.     {
  21.         if(ok==0)
  22.         {
  23.             rez=vec[nod];
  24.             ok=1;
  25.         }
  26.         else
  27.             rez=rez&vec[nod];
  28.         return;
  29.     }
  30.     unsigned int mij=(a+b)/2;
  31.     if(ua<=mij)
  32.         query(2*nod,a,mij,ua,ub);
  33.     if(ub>=mij+1)
  34.         query(2*nod+1,mij+1,b,ua,ub);
  35. }
  36. void update(int nod,int a,int b,int ub)
  37. {
  38.     if(a==b)
  39.     {
  40.         vec[nod]=v[a];
  41.         return;
  42.     }
  43.     int mij=(a+b)/2;
  44.     if(ub<=mij)
  45.         update(2*nod,a,mij,ub);
  46.     else
  47.         update(2*nod+1,mij+1,b,ub);
  48.     vec[nod]=vec[2*nod]&vec[2*nod+1];
  49. }
  50. int main()
  51. {
  52. #ifdef HOME
  53.     freopen("test.in","r",stdin);
  54.     freopen("test.out","w",stdout);
  55. #endif // HOME
  56.     unsigned int n,m,i,a,b,nr;
  57.     char c;
  58.     cin>>n>>m;
  59.     for(i=1; i<=n; i++)
  60.         cin>>v[i];
  61.     aint(1,1,n);
  62.     for(i=1; i<=m; i++)
  63.     {
  64.         cin>>c;
  65.         if(c=='Q')
  66.         {
  67.             ok=0;
  68.             cin>>a>>b>>nr;
  69.             query(1,1,n,a,b);
  70.             cout<<(nr&rez)<<'\n';
  71.         }
  72.         else
  73.         {
  74.             cin>>a>>b;
  75.             v[a]=b;
  76.             update(1,1,n,a);
  77.         }
  78.     }
  79.     return 0;
  80. }
Advertisement
Add Comment
Please, Sign In to add comment