제출 #1178575

#제출 시각아이디문제언어결과실행 시간메모리
1178575alexander707070Mosaic (IOI24_mosaic)C++20
0 / 100
64 ms15292 KiB
#include<bits/stdc++.h> #define MAXN 100007 using namespace std; struct event{ int l,r,id; }; int row1[MAXN]; int row[3*MAXN]; int n,q; vector<event> queries[MAXN]; int a[MAXN],ans[MAXN]; int answer(int l,int r){ int res=0; for(int i=l;i<=r;i++)res+=a[i]; return res; } 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]; 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]; 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]; calc_queries(2); if(n==3){ return solve(); } 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=start;f<=fr;f++){ if(row[f]==1){ fr=f; break; } } for(auto s:queries[i]){ for(int f=s.l;f<=s.r;f++){ ans[s.id]+=row[f+start-1]; } } } 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...