Submission #1338354

#TimeUsernameProblemLanguageResultExecution timeMemory
1338354trungcanTornjevi (COCI25_tornjevi)C++20
110 / 110
32 ms6620 KiB
#include <bits/stdc++.h>
#define pii pair<int, int>
#define fi first
#define se second

using namespace std;

const int N = 1e5 + 5;

int n, q, last[2], ans[N];
int fen[N], nxt[N];
vector<pii> Q[N];
stack<int> st[2];

void update(int x, int val){
    for (; x <= n; x += x & -x)
        fen[x] += val;
}

int get(int x){
    int res = 0;
    for (; x > 0; x -= x & -x)
        res += fen[x];
    return res;
}

int main(){
    ios_base::sync_with_stdio(0); cin.tie(0);

    cin >> n >> q;
    for (int i = 1, t; i <= n; ++i){
        char x; cin >> x;
        t = (x == 'P' ? 0 : 1);
        st[t].push(i); t ^= 1;
        if (!st[t].empty())
            nxt[st[t].top()] = i, st[t].pop();
    }

    for (int i = 1, l, r; i <= q; ++i){
        cin >> l >> r;
        Q[l].push_back({r, i});
    }

    for (int i = n; i > 0; --i){
        if (nxt[i])
            update(nxt[i], -1);
        update(i, 1);

        for (pii x: Q[i])
            ans[x.second] = get(x.first);
    }
    for (int i = 1; i <= q; ++i) cout << ans[i] << "\n";
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...