Submission #516520

#TimeUsernameProblemLanguageResultExecution timeMemory
516520CSQ31Street Lamps (APIO19_street_lamps)C++17
20 / 100
5085 ms19804 KiB
#include<bits/stdc++.h> using namespace std; const int sq = 500; const int MAXN = 3e5+1; int a[MAXN],ans[MAXN]; vector<array<int,3>>query[MAXN]; vector<int>upd[MAXN]; int dp[MAXN],n,q; map<int,int>occ[sq]; int all[sq],delta[sq],L[sq],R[sq]; //is it all just the same number?delta plus on this block void rebuild(int v){ for(int i=L[v];i<=R[v];i++){ if(all[v])dp[i] = delta[v]; else dp[i]+=delta[v]; } delta[v] = all[v] = 0; } void change(int l,int r,int c){ int a = l/sq; int b = r/sq; if(a==b){ rebuild(a); for(int i=l;i<=r;i++){ if(c)dp[i]++; else dp[i] = 0; } return; } for(int i = (l == L[a]? a:a+1); i <= (r == R[b]? b:b-1) ;i++){ if(c)delta[i]++; else{ all[i] = 1; delta[i] = 0; } } //just rebuild entire thing if(l != L[a]){ rebuild(a); for(int i=l;i<=R[a];i++){ if(c)dp[i]++; else dp[i] = 0; } } if(r != R[b]){ rebuild(b); for(int i=L[b];i<=r;i++){ if(c)dp[i]++; else dp[i] = 0; } } } int main() { ios_base::sync_with_stdio(0);cin.tie(0); cin>>n>>q; for(int i=1;i<=n;i++){ upd[i] = {0}; char c; cin>>c; a[i] = c-'0'; } for(int i=0,j=0;i<=n;i+=sq){ L[j] = i; R[j] = min(q,i+sq-1); all[j] = 1; j++; } int cnt = 0; for(int i=1;i<=q;i++){ string s; cin>>s; if(s=="toggle"){ int x;cin>>x; upd[x].push_back(i); }else{ int a,b; cin>>a>>b; query[b-1].push_back({a,i-1,cnt++}); } } for(int i=1;i<=n;i++){ int c = a[i]; upd[i].push_back(q+1); for(int j=0;j+1<(int)(upd[i].size());j++){ change(upd[i][j],upd[i][j+1]-1,c); c^=1; } for(auto x:query[i]){ int t = x[1]/sq; if(x[1] != R[t]){ rebuild(t); for(int j=L[t];j<=x[1];j++)ans[x[2]]+=dp[j] >= i-x[0]+1; } } } for(int i=0;i<cnt;i++)cout<<ans[i]<<'\n'; }
#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...