Submission #1283413

#TimeUsernameProblemLanguageResultExecution timeMemory
1283413MMihalevMosaic (IOI24_mosaic)C++20
48 / 100
85 ms22284 KiB
#include<iostream> #include<algorithm> #include<vector> #include "mosaic.h" using namespace std; const int MAX_N=2e5+5; int n,q; vector<long long>ans; int a1[3][MAX_N]; int a2[MAX_N][3]; int a[2*MAX_N]; int p[2*MAX_N]; int p0[MAX_N]; int p1[MAX_N]; int id(int x,int y)//min(x,y)>=2 { int raz=min(x-2,y-2); x-=raz;y-=raz; if(x==2) { return n-2+y-2; } return n-x; } std::vector<long long> mosaic(std::vector<int> X, std::vector<int> Y,std::vector<int> T, std::vector<int> B,std::vector<int> L, std::vector<int> R) { n=X.size(); q=T.size(); ans.clear(); ans.resize(q); for(int i=0;i<n;i++) { a1[0][i]=X[i]; } for(int i=0;i<n;i++) { a2[i][0]=Y[i]; } a1[1][0]=a2[1][0]; for(int i=1;i<n;i++) { a1[1][i]=(a1[1][i-1]+a1[0][i]==0 ? 1 : 0); } a2[0][1]=a1[0][1]; for(int i=1;i<n;i++) { a2[i][1]=(a2[i-1][1]+a2[i][0]==0 ? 1 : 0); } a1[2][0]=a2[2][0];a1[2][1]=a2[2][1]; for(int i=2;i<n;i++) { a1[2][i]=(a1[2][i-1]+a1[1][i]==0 ? 1 : 0); } a2[0][2]=a1[0][2];a2[1][2]=a1[1][2]; for(int i=2;i<n;i++) { a2[i][2]=(a2[i-1][2]+a2[i][1]==0 ? 1 : 0); } for(int i=2;i<n;i++) { a[id(2,i)]=a1[2][i]; a[id(i,2)]=a2[i][2]; } for(int i=1;i<=2*n-5;i++) { p[i]=p[i-1]+a[i]; } for(int i=1;i<=n;i++) { p0[i]=p0[i-1]+a1[0][i-1]; p1[i]=p1[i-1]+a1[1][i-1]; } for(int i=1;i<=q;i++) { if(T[i-1]<2) { if(T[i-1]==0) { ans[i-1]=p0[R[i-1]+1]-p0[L[i-1]]; } else { ans[i-1]=p1[R[i-1]+1]-p1[L[i-1]]; } continue; } if(R[i-1]<2) { if(L[i-1]==0 && R[i-1]==1) { ans[i-1]=a2[T[i-1]][0]+a2[T[i-1]][1]; } else if(L[i-1]==0 && R[i-1]==0) { ans[i-1]=a2[T[i-1]][0]; } else ans[i-1]=a2[T[i-1]][1]; continue; } while(L[i-1]<2) { ans[i-1]+=a2[T[i-1]][L[i-1]++]; } ans[i-1]+=p[id(T[i-1],R[i-1])]-p[id(T[i-1],L[i-1])-1]; } return ans; }
#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...