Submission #679271

# Submission time Handle Problem Language Result Execution time Memory
679271 2023-01-08T01:24:47 Z gyandevrey6 Election (BOI18_election) C++17
100 / 100
1040 ms 27928 KB
#include <bits/stdc++.h>
#define Loop(x,l,r) for (ll x = (l); x < (ll)(r); ++x)
#define LoopR(x,l,r) for (ll x = (r)-1; x >= (ll)(l); --x)
typedef long long ll;
typedef std::pair<int, int> pii;
typedef std::pair<ll , ll > pll;
using namespace std;

const int N = 500010;
struct node {
    int mnl, mnr, mns;
} seg[N*4];

string s;
int pre[N], suf[N];
int n;

inline node merge(node x, node y)
{
    node ans;
    ans.mnl = min(x.mnl, y.mnl);
    ans.mnr = min(x.mnr, y.mnr);
    ans.mns = min({x.mns, y.mns, x.mnl + y.mnr});
    return ans;
}

void build(int i, int b, int e)
{
    if (e-b == 1) {
        seg[i].mnl = pre[b];
        seg[i].mnr = suf[b];
        seg[i].mns = seg[i].mnl + seg[i].mnr;
        return;
    }
    build(2*i+1, b, (b+e)/2);
    build(2*i+2, (b+e)/2, e);
    seg[i] = merge(seg[2*i+1], seg[2*i+2]);
}

node get(int l, int r, int i, int b, int e)
{
    if (l <= b && e <= r)
        return seg[i];
    int mid = (b+e)/2;
    if (l < mid && mid < r) {
        return merge(get(l, r, 2*i+1, b, mid),
                     get(l, r, 2*i+2, mid, e));
    } else if (l < mid) {
        return get(l, r, 2*i+1, b, mid);
    } else {
        return get(l, r, 2*i+2, mid, e);
    }
}

int main()
{
    cin.tie(0) -> sync_with_stdio(false);
    int q;
    cin >> n;
    cin >> s;
    Loop (i,0,n)
        pre[i+1] = pre[i] + (s[i] == 'C'? 1: -1);
    LoopR (i,0,n)
        suf[i] = suf[i+1] + (s[i] == 'C'? 1: -1);
    build(0, 0, n+1);
    cin >> q;
    while (q--) {
        int l, r;
        cin >> l >> r;
        --l;
        auto ans = get(l, r+1, 0, 0, n+1);
        cout << -(ans.mns - pre[l] - suf[r]) << endl;
    }
}
# Verdict Execution time Memory Grader output
1 Correct 4 ms 340 KB Output is correct
2 Correct 3 ms 340 KB Output is correct
3 Correct 4 ms 340 KB Output is correct
4 Correct 4 ms 340 KB Output is correct
5 Correct 3 ms 340 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 4 ms 340 KB Output is correct
2 Correct 3 ms 340 KB Output is correct
3 Correct 4 ms 340 KB Output is correct
4 Correct 4 ms 340 KB Output is correct
5 Correct 3 ms 340 KB Output is correct
6 Correct 118 ms 5332 KB Output is correct
7 Correct 120 ms 5204 KB Output is correct
8 Correct 124 ms 5184 KB Output is correct
9 Correct 128 ms 5456 KB Output is correct
10 Correct 117 ms 5204 KB Output is correct
11 Correct 121 ms 5328 KB Output is correct
12 Correct 124 ms 5444 KB Output is correct
13 Correct 117 ms 5456 KB Output is correct
14 Correct 120 ms 5376 KB Output is correct
15 Correct 116 ms 5300 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 4 ms 340 KB Output is correct
2 Correct 3 ms 340 KB Output is correct
3 Correct 4 ms 340 KB Output is correct
4 Correct 4 ms 340 KB Output is correct
5 Correct 3 ms 340 KB Output is correct
6 Correct 118 ms 5332 KB Output is correct
7 Correct 120 ms 5204 KB Output is correct
8 Correct 124 ms 5184 KB Output is correct
9 Correct 128 ms 5456 KB Output is correct
10 Correct 117 ms 5204 KB Output is correct
11 Correct 121 ms 5328 KB Output is correct
12 Correct 124 ms 5444 KB Output is correct
13 Correct 117 ms 5456 KB Output is correct
14 Correct 120 ms 5376 KB Output is correct
15 Correct 116 ms 5300 KB Output is correct
16 Correct 988 ms 26724 KB Output is correct
17 Correct 907 ms 26556 KB Output is correct
18 Correct 930 ms 26720 KB Output is correct
19 Correct 876 ms 26064 KB Output is correct
20 Correct 972 ms 25852 KB Output is correct
21 Correct 976 ms 27656 KB Output is correct
22 Correct 1040 ms 27668 KB Output is correct
23 Correct 1004 ms 27928 KB Output is correct
24 Correct 991 ms 27464 KB Output is correct
25 Correct 989 ms 26996 KB Output is correct