Submission #1283402

#TimeUsernameProblemLanguageResultExecution timeMemory
1283402MMihalevMosaic (IOI24_mosaic)C++20
22 / 100
77 ms17608 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[5003][5003]; int p[5003][5003]; int query(int x1,int x2,int y1,int y2) { return p[x2][y2]-p[x1-1][y2]-p[x2][y1-1]+p[x1-1][y1-1]; } 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.resize(q); if(n<=5000 && 0) { for(int j=1;j<=n;j++) { a[1][j]=X[j-1]; } for(int i=1;i<=n;i++) { a[i][1]=Y[i-1]; } for(int i=2;i<=n;i++) { for(int j=2;j<=n;j++) { if(a[i-1][j]+a[i][j-1]==0)a[i][j]=1; else a[i][j]=0; } } for(int i=1;i<=n;i++) { for(int j=1;j<=n;j++) { p[i][j]=p[i-1][j]+a[i][j]+p[i][j-1]-p[i-1][j-1]; } } for(int i=1;i<=q;i++) { ans[i-1]=query(T[i-1]+1,B[i-1]+1,L[i-1]+1,R[i-1]+1); } return ans; } 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=1;i<=q;i++) { if(T[i-1]<3) { ans[i-1]=a1[T[i-1]][L[i-1]]; continue; } if(L[i-1]<3) { ans[i-1]=a2[T[i-1]][L[i-1]]; continue; } if(T[i-1]<L[i-1]) { int x=T[i-1]-2; ans[i-1]=a1[2][L[i-1]-x]; } else { int x=L[i-1]-2; ans[i-1]=a2[T[i-1]-x][2]; } } 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...