제출 #1300303

#제출 시각아이디문제언어결과실행 시간메모리
1300303eyadoozElection (BOI18_election)C++20
0 / 100
1 ms568 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; }; 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; return res; } void update(int x, int y) { x+=N; tree[x].ml=y; tree[x].mr=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 << max(x.mr, x.ml) << endl; } }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...