Submission #978982

#TimeUsernameProblemLanguageResultExecution timeMemory
978982De3b0oStreet Lamps (APIO19_street_lamps)C++17
0 / 100
4287 ms459188 KiB
#pragma GCC optimize("Ofast") #pragma GCC target("avx2") #include<bits/stdc++.h> #define ll long long #define F first #define S second #define in insert #define pb push_back #define ppb pop_back() #define d3 ios::sync_with_stdio(0);cin.tie(0);cout.tie(0); #define cans cout << ans << "\n"; #define yes cout << "Yes" << "\n"; #define no cout << "No" << "\n"; #define pll pair<ll,ll> #define lin cout << "\n"; #define sqr 340 #define mod 1000000007 #define mid ((l+r)/2) #define lc (2*n) #define rc (2*n+1) using namespace std; ll fp(ll x , ll y) { if(y==0) return 1; ll z = fp(x,y/2); if(y&1) return z*z%mod*x%mod; else return z*z%mod; } int sqrot(ll x) { int l = 0 , r = INT_MAX; while(l<=r) { if(mid*mid>=x) r=mid-1; else l=mid+1; } return r+1; } ll cel(ll x , ll y) { return x/y + bool(x%y); } bool s[400009]; set<pll> seg[2000009]; set<ll> sl , sr; void se(ll n , ll l , ll r , ll idx , ll val1 , ll val2) { if(l>idx||r<idx) return; seg[n].in({val1,val2}); if(l!=r) { se(lc,l,mid,idx,val1,val2); se(rc,mid+1,r,idx,val1,val2); } } ll sg(ll n , ll l , ll r , ll l1 , ll r1 , ll idx) { if(l>r1||r<l1) return 1e10; if(l>=l1&&r<=r1) { auto it = seg[n].lower_bound({idx,0}); ll x = 1e10; if(it!=seg[n].end()) x=it->S; return x; } return min(sg(lc,l,mid,l1,r1,idx),sg(rc,mid+1,r,l1,r1,idx)); } int main() { d3 ll n , q; cin >> n >> q; string s1; cin >> s1; for(int i = 0 ; n>i ; i++) { if(s1[i]=='0') { sl.in(-i-1); sr.in(i+1); s[i+1]=0; } else s[i+1]=1; } for(int i = 1 ; n>=i ; i++) { if(s[i]==1) { ll j = i; for(;n>=j;j++) { if(s[j]==0) break; } se(1,1,n+1,i,j,0); i=j; } } for(ll h = 1 ; q>=h ; h++) { string t; cin >> t; if(t[0]=='q') { ll a , b; cin >> a >> b; ll e = sg(1,1,n+1,1,a,b); ll ans = h-e; if(ans<0) ans=0; cans } else { ll x; cin >> x; s[x]=1; sl.erase(sl.find(-x)); sr.erase(sr.find(x)); ll l1 = x , r1 = x+1; auto it = sl.lower_bound(-x); if(it==sl.end()) l1=1; else l1=-*it+1; auto it1 = sr.lower_bound(x); if(it1==sr.end()) r1=n+1; else r1=*it1-1; se(1,1,n+1,l1,r1,h); } } }
#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...