Submission #1178579

#TimeUsernameProblemLanguageResultExecution timeMemory
1178579alexander707070Mosaic (IOI24_mosaic)C++20
48 / 100
117 ms26680 KiB
#include<bits/stdc++.h> #define MAXN 200007 using namespace std; struct event{ int l,r,id; }; int row1[MAXN]; int row[3*MAXN],suffix[3*MAXN]; int n,q; vector<event> queries[MAXN]; int a[MAXN],ans[MAXN]; int answer(int l,int r){ return a[l]-a[r+1]; } void calc_queries(int w){ for(auto s:queries[w]){ ans[s.id]=answer(s.l,s.r); } } vector<long long> solve(){ vector<long long> sol; for(int i=0;i<q;i++){ sol.push_back(ans[i]); } return sol; } vector<long long> mosaic(vector<int> X, vector<int> Y,vector<int> T, vector<int> B,vector<int> L, vector<int> R){ n=int(X.size()); q=int(T.size()); for(int i=0;i<q;i++){ queries[T[i]].push_back({L[i],R[i],i}); } for(int i=0;i<n;i++)a[i]=X[i]; for(int i=n-1;i>=0;i--)a[i]+=a[i+1]; calc_queries(0); if(n==1)return solve(); row1[0]=Y[1]; for(int i=1;i<n;i++){ if(row1[i-1]==0 and X[i]==0)row1[i]=1; else row1[i]=0; } /// here we have row 1 for(int i=0;i<n;i++)a[i]=row1[i]; for(int i=n-1;i>=0;i--)a[i]+=a[i+1]; calc_queries(1); if(n==2)return solve(); int start=2*n+1,fr=start; row[start-1]=Y[2]; for(int i=start;i<=start+n-2;i++){ if(row[i-1]==0 and row1[i-start+1]==0)row[i]=1; else row[i]=0; } for(int i=start;i<=start+n-1;i++){ if(row[i]==1){ fr=i; break; } } /// here we have row 2 for(int i=0;i<n;i++)a[i]=row[i+start-1]; for(int i=n-1;i>=0;i--)a[i]+=a[i+1]; calc_queries(2); if(n==3)return solve(); for(int f=start+n;f>=start-1;f--)suffix[f]=suffix[f+1]+row[f]; for(int i=3;i<n;i++){ start--; row[start-1]=Y[i]; for(int f=start;f<fr-1;f++){ row[f]=1-row[f-1]; } for(int f=fr-1;f>=start-1;f--){ suffix[f]=suffix[f+1]+row[f]; } for(int f=start;f<=fr;f++){ if(row[f]==1){ fr=f; break; } } for(auto s:queries[i]){ ans[s.id]=suffix[s.l+start-1] - suffix[s.r+start]; } } return solve(); } /*int main(){ //mosaic({1,1,1,0,0,0,1,1,0,1,0,1,1,1,0},{1,1,1,0,0,0,1,1,0,1,0,1,1,1,0},{},{},{},{}); auto yo=mosaic({1, 0, 1, 0}, {1, 1, 0, 1}, {1, 3}, {1, 3}, {0, 0}, {3, 3}); for(auto s:yo)cout<<s<<" "; 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...