Submission #587412

#TimeUsernameProblemLanguageResultExecution timeMemory
587412Bench0310Pairs (IOI07_pairs)C++17
100 / 100
212 ms25268 KiB
#include <bits/stdc++.h> using namespace std; typedef long long ll; const int N2=150000; int bit2[N2]; void add2(int i,int d) { for(;i<N2;i=i|(i+1)) bit2[i]+=d; } int sum2(int x) { int s=0; for(int i=min(x,N2-1);i>=0;i=(i&(i+1))-1) s+=bit2[i]; return s; } int sum2(int l,int r){return sum2(r)-sum2(l-1);} const int N3=225; int bit3[N3][N3][N3]; void add3(int x,int y,int z,int d) { for(int i=x;i<N3;i=i|(i+1)) for(int j=y;j<N3;j=j|(j+1)) for(int k=z;k<N3;k=k|(k+1)) bit3[i][j][k]+=d; } int sum3(int x,int y,int z) { int s=0; for(int i=min(x,N3-1);i>=0;i=(i&(i+1))-1) for(int j=min(y,N3-1);j>=0;j=(j&(j+1))-1) for(int k=min(z,N3-1);k>=0;k=(k&(k+1))-1) s+=bit3[i][j][k]; return s; } int sum3(int li,int lj,int lk,int ri,int rj,int rk) { int s=0; for(int m=0;m<8;m++) { int t=sum3((m&1)?li-1:ri,(m&2)?lj-1:rj,(m&4)?lk-1:rk); int c=(m&1)+((m>>1)&1)+((m>>2)&1); if((c&1)==0) s+=t; else s-=t; } return s; } int main() { ios::sync_with_stdio(0); cin.tie(0); int b,n,d,m; cin >> b >> n >> d >> m; vector<array<int,4>> v(n); for(int i=0;i<n;i++) { int x,y,z; if(b==1) { cin >> x; v[i]={x,0,0,0}; } if(b==2) { cin >> x >> y; v[i]={x+y,74999+x-y,0,0}; } if(b==3) { cin >> x >> y >> z; v[i]={x+y+z,73-x+y+z,73+x-y+z,73+x+y-z}; } } sort(v.begin(),v.end()); ll res=0; int l=0,r=-1; for(int i=0;i<n;i++) { while(r+1<n&&v[r+1][0]-v[i][0]<=d) { r++; if(b==2) add2(v[r][1],1); if(b==3) add3(v[r][1],v[r][2],v[r][3],1); } while(v[i][0]-v[l][0]>d) { if(b==2) add2(v[l][1],-1); if(b==3) add3(v[l][1],v[l][2],v[l][3],-1); l++; } if(b==1) res+=(r-l+1); if(b==2) res+=sum2(v[i][1]-d,v[i][1]+d); if(b==3) res+=sum3(v[i][1]-d,v[i][2]-d,v[i][3]-d,v[i][1]+d,v[i][2]+d,v[i][3]+d); } cout << (res-n)/2 << "\n"; return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...