Advertisement
Guest User

Untitled

a guest
May 25th, 2019
105
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.02 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2.  
  3. using namespace std;
  4.  
  5. #define ll long long
  6. #define mp make_pair
  7. #define f first
  8. #define s second
  9. #define pb push_back
  10.  
  11. #define zeros(x) ((x^(x-1))&x)
  12.  
  13. ifstream fin("sos.in");
  14. ofstream fout("sos.out");
  15.  
  16.  
  17.  
  18. ll tree[52][52][35][102];
  19. int x,y,z,t,X,Y,Z,P;
  20. int N,M,K,T,val,q;
  21.  
  22. void update(int x, int y, int z, int t, ll val)
  23. {
  24.     int i,j,k,p;
  25.     for(i=x; i<=N; i+=zeros(i))
  26.         for(j=y; j<=M; j+=zeros(j))
  27.             for(k=z; k<=K; k+=zeros(k))
  28.                 for(p=t; p<=T; p+=zeros(p))
  29.                     tree[i][j][k][p]+=val;
  30. }
  31.  
  32. ll compute(int x,int y,int z, int t)
  33. {
  34.     int i,j,k,p;
  35.     ll ans = 0;
  36.     for(i=x; i>0; i-=zeros(i))
  37.         for(j=y; j>0; j-=zeros(j))
  38.             for(k=z; k>0; k-=zeros(k))
  39.                 for(p=t; p>0; p-=zeros(p))
  40.                     ans+=tree[i][j][k][p];
  41.     return ans;
  42. }
  43.  
  44. ll answer(int x, int y, int z, int t, int A, int B, int C, int D)
  45. {
  46.     ll ans = 0;
  47.     ans += compute(A,B,C,D);
  48.  
  49.     ans -= compute(A,B,C,t);
  50.     ans -= compute(A,B,z,D);
  51.     ans -= compute(A,y,C,D);
  52.     ans -= compute(x,B,C,D);
  53.  
  54.     ans += compute(A,B,z,t);
  55.     ans += compute(A,y,C,t);
  56.     ans += compute(x,B,C,t);
  57.     ans += compute(A,y,z,D);
  58.     ans += compute(x,B,z,D);
  59.     ans += compute(x,y,C,D);
  60.  
  61.     ans -= compute(x,y,z,D);
  62.     ans -= compute(x,y,C,t);
  63.     ans -= compute(x,B,z,t);
  64.     ans -= compute(A,y,z,t);
  65.  
  66.     ans += compute(x,y,z,t);
  67.  
  68.     return ans;
  69. }
  70.  
  71. int main()
  72. {
  73.     fin.sync_with_stdio(false);
  74.     fout.sync_with_stdio(false);
  75.  
  76.     fin>>q>>N>>M>>K>>T;
  77.     assert(1<=q && q<=10000 && 1<=N && N<=100 && N%2==0);
  78.     assert(1<=M && M<=100 && M%2==0);
  79.     assert(1<=K && K<=100 && K%3==0);
  80.     assert(1<=T && T<=100 && T%2==0);
  81.  
  82.  
  83.     N/=2;
  84.     M/=2;
  85.     K/=3;
  86.     while(q--)
  87.     {
  88.         int p;
  89.         fin>>p;
  90.         switch(p)
  91.         {
  92.         case 1:
  93.             fin>>x>>y>>z>>t>>val;
  94.             x--;
  95.             x/=2;
  96.             x++;
  97.             y--;
  98.             y/=2;
  99.             y++;
  100.             z--;
  101.             z/=3;
  102.             z++;
  103.  
  104.             assert(1<=x && x<=N);
  105.             assert(1<=y && y<=M);
  106.             assert(1<=z && z<=K);
  107.             assert(1<=t && t<=T);
  108.  
  109.             update(x,y,z,t,val);
  110.             break;
  111.         case 2:
  112.             fin>>x>>y>>z>>p>>X>>Y>>Z>>P;
  113.  
  114.  
  115.  
  116.             x--;
  117.             x/=2;
  118.             x++;
  119.             y--;
  120.             y/=2;
  121.             y++;
  122.             z--;
  123.             z/=3;
  124.             z++;
  125.             X--;
  126.             X/=2;
  127.             X++;
  128.             Y--;
  129.             Y/=2;
  130.             Y++;
  131.             Z--;
  132.             Z/=3;
  133.             Z++;
  134.  
  135.  
  136.             assert(1<=X && X<=N);
  137.             assert(1<=Y && Y<=M);
  138.             assert(1<=Z && Z<=K);
  139.             assert(1<=P && P<=T);
  140.  
  141.             assert(1<=x && x<=X);
  142.             assert(1<=y && y<=Y);
  143.             assert(1<=z && z<=Z);
  144.             assert(1<=p && p<=P);
  145.  
  146.             fout<<answer(x-1,y-1,z-1,p-1,X,Y,Z,P)<<'\n';
  147.             break;
  148.         }
  149.     }
  150. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement