Submission #1132389

#TimeUsernameProblemLanguageResultExecution timeMemory
1132389GrayElection (BOI18_election)C++20
100 / 100
467 ms66456 KiB
#include <bits/stdc++.h> #include <vector> using namespace std; #define ll long long #define ull unsigned long long #define ld long double #define ff first #define ss second #define ln "\n" #define mp make_pair const ll INF = 2e18; const ll MOD = 998244353; struct SegTree{ struct node{ ll pref, suff, sum, res; }; vector<node> t; ll sz, rsz; SegTree(ll N){ sz=N*4; rsz=N; t.resize(sz); } node merge(node l, node r){ node nw; nw.pref = min({l.pref, l.sum+r.pref, 0ll}); nw.suff = min({r.suff, r.sum+l.suff, 0ll}); nw.sum = l.sum+r.sum; nw.res = min({l.sum+r.res, r.sum+l.res, l.pref+r.suff, 0ll}); return nw; } void build(ll tl, ll tr, ll v, string &s){ if (tl==tr){ t[v].sum = {s[tl]=='C'?1:-1}; t[v].pref=t[v].suff=t[v].res=min(0ll, t[v].sum); }else{ ll tm = (tl+tr)/2; build(tl, tm, v*2, s); build(tm+1, tr, v*2+1, s); t[v] = merge(t[v*2], t[v*2+1]); } } node query(ll tl, ll tr, ll v, ll l, ll r){ if (tl==l and tr==r){ return t[v]; }else if (l>r) return {0, 0, 0, 0}; else{ ll tm = (tl+tr)/2; return merge(query(tl, tm, v*2, l, min(r, tm)), query(tm+1, tr, v*2+1, max(l, tm+1), r)); } } ll query(ll l, ll r){ return abs(query(0, rsz-1, 1, l, r).res); } void build(string &s){ build(0, rsz-1, 1, s); } }; void solve(){ ll n; cin >> n; string s; cin >> s; SegTree tr(n); tr.build(s); ll q; cin >> q; while (q--){ ll l, r; cin >> l >> r; l--; r--; cout << tr.query(l, r) << ln; } } int main(){ ios_base::sync_with_stdio(false); cin.tie(nullptr); auto start = chrono::high_resolution_clock::now(); ll t=1; // cin >> t; while (t--) solve(); #ifdef LOCAL auto duration = chrono::duration_cast<chrono::microseconds>(chrono::high_resolution_clock::now() - start); cout << setprecision(0) << fixed << "time: " << (double)duration.count()/1000.0 << " milliseconds" << endl; #endif }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...