Submission #1366744

#TimeUsernameProblemLanguageResultExecution timeMemory
1366744rahidilbayramliElection (BOI18_election)C++20
82 / 100
36 ms9116 KiB
#include<bits/stdc++.h>
#define ll long long
#define ld long double
#define vl vector<ll>
#define vi vector<int>
#define pll pair<ll, ll>
#define pii pair<int, int>
#define all(v) v.begin(), v.end()
#define rall(v) v.rbegin(), v.rend()
#define pb push_back
#define sz(v) (int)(v.size())
#define f first
#define s second
using namespace std;
const ll sz = 5e5+5;
struct nd{
    ll l, r, sm, ans;
}segtree[sz];
string s;
void build(ll v, ll l, ll r)
{
    if(l == r)
    {
        if(s[l] == 'C')
        {
            segtree[v].l = segtree[v].r = segtree[v].ans = 0;
            segtree[v].sm = -1;
        }
        else
            segtree[v].l = segtree[v].r = segtree[v].sm = segtree[v].ans = 1;
    }
    else
    {
        ll mid = (l + r) / 2;
        build(2*v, l, mid);
        build(2*v+1, mid+1, r);
        nd nw;
        nw.l = max(segtree[2*v].l, segtree[2*v].sm + segtree[2*v+1].l);
        nw.r = max(segtree[2*v+1].r, segtree[2*v+1].sm + segtree[2*v].r);
        nw.sm = segtree[2*v].sm + segtree[2*v+1].sm;
        nw.ans = max({segtree[2*v].l + segtree[2*v+1].r, segtree[2*v].ans + segtree[2*v+1].sm, segtree[2*v].sm + segtree[2*v+1].ans});
        segtree[v] = nw;
    }
}
nd query(ll v, ll l, ll r, ll tl, ll tr)
{
    if(tl > tr)
        return {0, 0, 0, 0};
    if(l == tl && r == tr)
        return segtree[v];
    ll mid = (l + r) / 2;
    nd lans = query(2*v, l, mid, tl, min(mid, tr));
    nd rans = query(2*v+1, mid+1, r, max(mid+1, tl), tr);
    nd nw;
    nw.l = max(lans.l, lans.sm + rans.l);
    nw.r = max(rans.r, rans.sm + lans.r);
    nw.sm = lans.sm + rans.sm;
    nw.ans = max({lans.l + rans.r, lans.ans + rans.sm, lans.sm + rans.ans});
    return nw;
}
void solve()
{
    ll n, q, i, j;
    cin >> n;
    cin >> s;
    s = "#" + s;
    build(1, 1, n);
    cin >> q;
    while(q--)
    {
        ll l, r;
        cin >> l >> r;
        cout << query(1, 1, n, l, r).ans << "\n";
    }
}
int main()
{
    ios_base::sync_with_stdio(0);
    cin.tie(0);
    cout.tie(0);
    int tests = 1;
    //cin >> tests;
    while(tests--)
    {
        solve();
    }
}
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...