Submission #559811

#TimeUsernameProblemLanguageResultExecution timeMemory
559811jeqchoStreet Lamps (APIO19_street_lamps)C++17
20 / 100
259 ms14056 KiB
#include <bits/stdc++.h> using namespace std; typedef long double ld; typedef long long ll; typedef pair<int,int> pii; typedef vector<int> vi; typedef vector<pair<int,int>> vpi; #define FOR(i,a,b) for (int i = (a); i < (b); ++i) #define F0R(i,a) FOR(i,0,a) #define ROF(i,a,b) for (int i = (b)-1; i >= (a); --i) #define R0F(i,a) ROF(i,0,a) #define trav(a,x) for (auto& a: x) #define pb push_back #define rsz resize #define sz(x) int(x.size()) #define all(x) begin(x), end(x) #define fi first #define se second //int const N=3e5+3; //int const K=18+3; int const INF=1e9; template<class T> struct segmentTree { vector<T> seg; int arr_sz; T init_value = 0; // sum 0 // min 1e9+3 // max -(1e9+3) T comb(T a, T b) { //return a+b; //return min(a,b); return max(a,b); } void init(int n, vector<T> &arr) { int p2 = ceil(log2((long double)n)); arr_sz = 1<<p2; int tree_sz = 2*arr_sz; seg.rsz(tree_sz); fill(all(seg),init_value); F0R(i,n) { seg[arr_sz-1 + i]=arr[i]; } build(0,0,arr_sz); } T build(int idex, int lx, int rx) { if(lx==rx-1)return seg[idex]; seg[idex] = comb(build(2*idex+1, lx,(lx+rx)/2 ), build(2*idex+2, (lx+rx)/2,rx)); return seg[idex]; } void update(int idex, T val) { idex += arr_sz-1; seg[idex] = val; while(idex>0) { --idex; idex /= 2; seg[idex] = comb(seg[2*idex+1], seg[2*idex+2]); } } T query(int l, int r) { return query(0,l,r,0,arr_sz); } T query(int idex, int lq, int rq, int lx, int rx) { if(lx>=lq&&rx<=rq)return seg[idex]; else if(lx>=rq||rx<=lq) return init_value; else { return comb(query(2*idex+1,lq,rq, lx,(lx+rx)/2 ), query(2*idex+2,lq,rq, (lx+rx)/2,rx)); } } }; int main() { ios_base::sync_with_stdio(0); cin.tie(0); int n,q; cin>>n>>q; string s; cin>>s; segmentTree<int> seg; vi v(n,INF); F0R(i,n)if(s[i]=='1')v[i]=0; seg.init(n,v); F0R(p,q) { string t; cin>>t; if(t=="toggle") { int i; cin>>i; --i; seg.update(i,p+1); } else { int a,b; cin>>a>>b; --a;--b; int ans=p+1-seg.query(a,b); ans=max(ans,0); cout<<ans<<'\n'; } } 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...