Submission #1264790

#TimeUsernameProblemLanguageResultExecution timeMemory
1264790duyanhchupapiElection (BOI18_election)C++20
100 / 100
379 ms20292 KiB
#include <bits/stdc++.h> using namespace std; const int N = 500005; int n, q; char c[N]; struct node{ int pre,suf,sum,ans; node operator + (node b) { node res; res.sum = sum + b.sum; res.pre = max(pre, sum + b.pre); res.suf = max(b.suf, b.sum + suf); res.ans = max({b.ans + sum, b.sum + ans, pre + b.suf}); return res; } } seg[4*N]; void build(int x,int l,int r) { if(l == r) { if(c[l] == 'T') seg[x] = {1,1,1,1}; else seg[x] = {0,0,-1,0}; return; } int mid = (l+r)/2; build(2*x,l,mid); build(2*x+1,mid+1,r); seg[x] = seg[2*x] + seg[2*x+1]; } node query(int x,int l,int r,int i,int j) { if(l > j || r < i) return {0,0,0,0}; if(l >= i && r <= j) return seg[x]; int mid = (l+r)/2; return query(2*x,l,mid,i,j) + query(2*x+1,mid+1,r,i,j); } int main(){ ios_base::sync_with_stdio(0);cin.tie(0);cout.tie(0); cin >> n; for(int i=1;i<=n;++i) cin >> c[i]; build(1,1,n); cin >> q; while(q--) { int l,r;cin >> l >> r; cout << query(1,1,n,l,r).ans << '\n'; } return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...