#include <bits/stdc++.h>
using namespace std;
#ifdef LOCAL
#include <debug.h>
#else
#define debug(...)
#endif
#define ft front
#define bk back
#define st first
#define nd second
#define ins insert
#define ers erase
#define pb push_back
#define pf push_front
#define _pb pop_back
#define _pf pop_front
#define lb lower_bound
#define ub upper_bound
#define mtp make_tuple
#define bg begin
#define ed end
#define all(x) (x).bg(), (x).ed()
#define sz(x) (int)(x).size()
typedef long long ll; typedef unsigned long long ull;
typedef double db; typedef long double ldb;
typedef pair<int, int> pi; typedef pair<ll, ll> pll;
typedef vector<int> vi; typedef vector<ll> vll; typedef vector<pi> vpi; typedef vector<pll> vpll;
typedef string str;
#define FOR(i, l, r) for (int i = (l); i <= (r); ++i)
#define FOS(i, r, l) for (int i = (r); i >= (l); --i)
#define FRN(i, n) for (int i = 0; i < (n); ++i)
#define FSN(i, n) for (int i = (n) - 1; i >= 0; --i)
#define EACH(i, x) for (auto &i : (x))
#define WHILE while
template<typename T> T gcd(T a, T b) { WHILE(b) { a = a % b; swap(a, b); } return a; }
template<typename T> T lcm(T a, T b) { return a / gcd(a, b) * b; }
#define file "TEST"
mt19937 rd(chrono::steady_clock::now().time_since_epoch().count());
ll rand(ll l, ll r) { return uniform_int_distribution<ll>(l, r)(rd); }
/*
----------------------------------------------------------------
END OF TEMPLATE
----------------------------------------------------------------
Tran The Bao - ghostwriter
Training for VOI23 gold medal
----------------------------------------------------------------
GOAT
----------------------------------------------------------------
*/
const int oo = 1e9 + 5;
const int T = 2e6 + 5;
const int N = 5e5 + 5;
int n, q, ans[N];
pi tr[T];
char s[N];
vpi d[N];
pi cmb(const pi &a, const pi &b) { if (a.st > 0) return b; if (b.st > 0) return a; return {min(b.st, b.nd + a.st), a.nd + b.nd}; }
void upd(int i, int l, int r, int q, int v) {
if (r < q || l > q) return;
if (l == r) {
tr[i] = {min(0, v), v};
return;
}
int mid = l + (r - l) / 2;
upd(i * 2, l, mid, q, v);
upd(i * 2 + 1, mid + 1, r, q, v);
tr[i] = cmb(tr[i * 2], tr[i * 2 + 1]);
}
pi get(int i, int l, int r, int ql, int qr) {
if (qr < l || ql > r) return {oo, oo};
if (ql <= l && r <= qr) return tr[i];
int mid = l + (r - l) / 2;
return cmb(get(i * 2, l, mid, ql, qr), get(i * 2 + 1, mid + 1, r, ql, qr));
}
signed main() {
ios_base::sync_with_stdio(0), cin.tie(0), cout.tie(0);
// freopen(file".inp", "r", stdin);
// freopen(file".out", "w", stdout);
cin >> n;
FOR(i, 1, n) cin >> s[i];
cin >> q;
FOR(i, 1, q) {
int l, r;
cin >> l >> r;
d[l].pb({r, i});
}
vi d1;
FOS(i, n, 1) {
if (s[i] == 'C') {
upd(1, 1, n, i, 1);
if (!d1.empty()) {
int cur = d1.bk();
d1._pb();
upd(1, 1, n, cur, -1);
}
}
else d1.pb(i);
EACH(j, d[i]) {
int r = j.st, id = j.nd;
ans[id] = ub(d1.rbegin(), d1.rend(), r) - d1.rbegin();
ans[id] += abs(get(1, 1, n, i, r).st);
}
}
FOR(i, 1, q) cout << ans[i] << '\n';
return 0;
}
/*
----------------------------------------------------------------
From Benq:
stuff you should look for
* int overflow, array bounds
* special cases (n=1?)
* do smth instead of nothing and stay organized
* WRITE STUFF DOWN
* DON'T GET STUCK ON ONE APPROACH
----------------------------------------------------------------
*/
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
8 ms |
12116 KB |
Output is correct |
2 |
Correct |
7 ms |
12100 KB |
Output is correct |
3 |
Correct |
9 ms |
12084 KB |
Output is correct |
4 |
Correct |
7 ms |
12116 KB |
Output is correct |
5 |
Correct |
8 ms |
12084 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
8 ms |
12116 KB |
Output is correct |
2 |
Correct |
7 ms |
12100 KB |
Output is correct |
3 |
Correct |
9 ms |
12084 KB |
Output is correct |
4 |
Correct |
7 ms |
12116 KB |
Output is correct |
5 |
Correct |
8 ms |
12084 KB |
Output is correct |
6 |
Correct |
65 ms |
17168 KB |
Output is correct |
7 |
Correct |
56 ms |
16548 KB |
Output is correct |
8 |
Correct |
57 ms |
16732 KB |
Output is correct |
9 |
Correct |
59 ms |
17044 KB |
Output is correct |
10 |
Correct |
59 ms |
16976 KB |
Output is correct |
11 |
Correct |
65 ms |
17344 KB |
Output is correct |
12 |
Correct |
61 ms |
17132 KB |
Output is correct |
13 |
Correct |
61 ms |
16988 KB |
Output is correct |
14 |
Correct |
68 ms |
17112 KB |
Output is correct |
15 |
Correct |
61 ms |
17124 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
8 ms |
12116 KB |
Output is correct |
2 |
Correct |
7 ms |
12100 KB |
Output is correct |
3 |
Correct |
9 ms |
12084 KB |
Output is correct |
4 |
Correct |
7 ms |
12116 KB |
Output is correct |
5 |
Correct |
8 ms |
12084 KB |
Output is correct |
6 |
Correct |
65 ms |
17168 KB |
Output is correct |
7 |
Correct |
56 ms |
16548 KB |
Output is correct |
8 |
Correct |
57 ms |
16732 KB |
Output is correct |
9 |
Correct |
59 ms |
17044 KB |
Output is correct |
10 |
Correct |
59 ms |
16976 KB |
Output is correct |
11 |
Correct |
65 ms |
17344 KB |
Output is correct |
12 |
Correct |
61 ms |
17132 KB |
Output is correct |
13 |
Correct |
61 ms |
16988 KB |
Output is correct |
14 |
Correct |
68 ms |
17112 KB |
Output is correct |
15 |
Correct |
61 ms |
17124 KB |
Output is correct |
16 |
Correct |
563 ms |
42976 KB |
Output is correct |
17 |
Correct |
417 ms |
38996 KB |
Output is correct |
18 |
Correct |
488 ms |
40000 KB |
Output is correct |
19 |
Correct |
467 ms |
41876 KB |
Output is correct |
20 |
Correct |
537 ms |
41948 KB |
Output is correct |
21 |
Correct |
579 ms |
44540 KB |
Output is correct |
22 |
Correct |
561 ms |
43860 KB |
Output is correct |
23 |
Correct |
556 ms |
42944 KB |
Output is correct |
24 |
Correct |
540 ms |
43244 KB |
Output is correct |
25 |
Correct |
541 ms |
43136 KB |
Output is correct |