Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <bits/stdc++.h>
- using namespace std;
- #define ll long long
- #define mp make_pair
- #define f first
- #define s second
- #define pb push_back
- #define zeros(x) ((x^(x-1))&x)
- ifstream fin("sos.in");
- ofstream fout("sos.out");
- ll tree[52][52][35][102];
- int x,y,z,t,X,Y,Z,P;
- int N,M,K,T,val,q;
- void update(int x, int y, int z, int t, ll val)
- {
- int i,j,k,p;
- for(i=x; i<=N; i+=zeros(i))
- for(j=y; j<=M; j+=zeros(j))
- for(k=z; k<=K; k+=zeros(k))
- for(p=t; p<=T; p+=zeros(p))
- tree[i][j][k][p]+=val;
- }
- ll compute(int x,int y,int z, int t)
- {
- int i,j,k,p;
- ll ans = 0;
- for(i=x; i>0; i-=zeros(i))
- for(j=y; j>0; j-=zeros(j))
- for(k=z; k>0; k-=zeros(k))
- for(p=t; p>0; p-=zeros(p))
- ans+=tree[i][j][k][p];
- return ans;
- }
- ll answer(int x, int y, int z, int t, int A, int B, int C, int D)
- {
- ll ans = 0;
- ans += compute(A,B,C,D);
- ans -= compute(A,B,C,t);
- ans -= compute(A,B,z,D);
- ans -= compute(A,y,C,D);
- ans -= compute(x,B,C,D);
- ans += compute(A,B,z,t);
- ans += compute(A,y,C,t);
- ans += compute(x,B,C,t);
- ans += compute(A,y,z,D);
- ans += compute(x,B,z,D);
- ans += compute(x,y,C,D);
- ans -= compute(x,y,z,D);
- ans -= compute(x,y,C,t);
- ans -= compute(x,B,z,t);
- ans -= compute(A,y,z,t);
- ans += compute(x,y,z,t);
- return ans;
- }
- int main()
- {
- fin.sync_with_stdio(false);
- fout.sync_with_stdio(false);
- fin>>q>>N>>M>>K>>T;
- assert(1<=q && q<=10000 && 1<=N && N<=100 && N%2==0);
- assert(1<=M && M<=100 && M%2==0);
- assert(1<=K && K<=100 && K%3==0);
- assert(1<=T && T<=100 && T%2==0);
- N/=2;
- M/=2;
- K/=3;
- while(q--)
- {
- int p;
- fin>>p;
- switch(p)
- {
- case 1:
- fin>>x>>y>>z>>t>>val;
- x--;
- x/=2;
- x++;
- y--;
- y/=2;
- y++;
- z--;
- z/=3;
- z++;
- assert(1<=x && x<=N);
- assert(1<=y && y<=M);
- assert(1<=z && z<=K);
- assert(1<=t && t<=T);
- update(x,y,z,t,val);
- break;
- case 2:
- fin>>x>>y>>z>>p>>X>>Y>>Z>>P;
- x--;
- x/=2;
- x++;
- y--;
- y/=2;
- y++;
- z--;
- z/=3;
- z++;
- X--;
- X/=2;
- X++;
- Y--;
- Y/=2;
- Y++;
- Z--;
- Z/=3;
- Z++;
- assert(1<=X && X<=N);
- assert(1<=Y && Y<=M);
- assert(1<=Z && Z<=K);
- assert(1<=P && P<=T);
- assert(1<=x && x<=X);
- assert(1<=y && y<=Y);
- assert(1<=z && z<=Z);
- assert(1<=p && p<=P);
- fout<<answer(x-1,y-1,z-1,p-1,X,Y,Z,P)<<'\n';
- break;
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement