Submission #1300311

#TimeUsernameProblemLanguageResultExecution timeMemory
1300311eyadoozElection (BOI18_election)C++20
100 / 100
380 ms69440 KiB
#include<bits/stdc++.h> using namespace std; typedef long long ll; typedef pair<int, int> pii; typedef pair<ll, ll> pll; #define pb push_back #define all(x) (x).begin(), (x).end() #define sz(x) (int) (x).size() #define endl '\n' struct node { int mr=0, ml=0, sum=0, ans; }; const int N=(1ll<<20); node tree[4*N]; node merge(node x, node y) { node res; res.mr=max(y.sum+x.mr, y.mr); res.ml=max(x.sum+y.ml, x.ml); res.sum=x.sum+y.sum; res.ans=max({x.sum+y.ans, x.ans+y.sum, x.ml+y.mr}); return res; } void update(int x, int y) { x+=N; tree[x].ml=max(0, y); tree[x].mr=max(0, y); tree[x].sum=y; while(x>1) { x/=2; tree[x]=merge(tree[2*x], tree[2*x+1]); } } node query(int l, int r, int ql, int qr, int v) { if(r<ql||l>qr) return {0, 0, 0}; if(ql<=l&&r<=qr) return tree[v]; int mid=(l+r)/2; return merge(query(l, mid, ql, qr, 2*v), query(mid+1, r, ql, qr, 2*v+1)); } int main() { cin.tie(0) -> sync_with_stdio(0); int n; cin >> n; string a; cin >> a; for(int i = 0;i < n;i++) update(i, (a[i]=='T'?1:-1)); int q; cin >> q; while(q--) { int l, r; cin >> l >> r; l--, r--; node x=query(0, N-1, l, r, 1); cout << x.ans << endl; } }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...