#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int maxn = 5e5 + 20;
string s;
struct node{
int T, LT, RT;
int C, LC, RC;
node(){
T = LT = RT = C = LC = RC = 0;
}
} seg[4*maxn];
node merge(node fi, node se){
node ret;
int tmp = min(fi.RC, se.LT);
fi.RC -= tmp, se.LT -= tmp;
tmp = min(fi.RC, se.T);
fi.RC -= tmp, se.T -= tmp, se.RT += tmp;
tmp = min(fi.C, se.LT);
fi.C -= tmp, fi.LC += tmp, se.LT -= tmp;
tmp = min(fi.C, se.T);
fi.C -= tmp, fi.LC += tmp, se.T -= tmp, se.RT += tmp;
tmp = min(fi.RT, se.LC);
fi.RT -= tmp, se.LC -= tmp;
tmp = min(fi.RT, se.C);
fi.RT -= tmp, se.C -= tmp, se.RC += tmp;
tmp = min(fi.T, se.LC);
fi.T -= tmp, fi.LT += tmp, se.LC -= tmp;
tmp = min(fi.T, se.C);
fi.T -= tmp, fi.LT += tmp, se.C -= tmp, se.RC += tmp;
tmp = min(fi.RT, se.LT);
fi.RT -= tmp, se.LT -= tmp, ret.T += tmp;
ret.T += fi.T + se.T;
ret.LT = fi.LT + se.LT;
ret.RT = fi.RT + se.RT;
ret.C = fi.C + se.C;
ret.LC = fi.LC + se.LC;
ret.RC = fi.RC + se.RC;
return ret;
}
node get(int id, int L, int R, int l, int r){
if (l <= L and R <= r)
return seg[id];
int mid = (L + R) >> 1;
if (r <= mid)
return get(2*id+0, L, mid, l, r);
if (mid <= l)
return get(2*id+1, mid, R, l, r);
return merge(get(2*id+0, L, mid, l, r), get(2*id+1, mid, R, l, r));
}
void build(int id, int L, int R){
if (L + 1 == R){
if (s[L] == 'C')
seg[id].C = 1;
else
seg[id].T = 1;
return;
}
int mid = (L + R) >> 1;
build(2*id+0, L, mid);
build(2*id+1, mid, R);
seg[id] = merge(seg[2*id+0], seg[2*id+1]);
}
int main(){
ios_base::sync_with_stdio(false);
int n;
cin >> n >> s;
build(1, 0, n);
int q;
cin >> q;
while (q --){
int l, r;
cin >> l >> r;
l --;
auto it = get(1, 0, n, l, r);
cout << it.T + it.LT + it.RT << '\n';
}
}
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
28 ms |
47360 KB |
Output is correct |
2 |
Correct |
29 ms |
47360 KB |
Output is correct |
3 |
Correct |
28 ms |
47352 KB |
Output is correct |
4 |
Correct |
29 ms |
47360 KB |
Output is correct |
5 |
Correct |
29 ms |
47360 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
28 ms |
47360 KB |
Output is correct |
2 |
Correct |
29 ms |
47360 KB |
Output is correct |
3 |
Correct |
28 ms |
47352 KB |
Output is correct |
4 |
Correct |
29 ms |
47360 KB |
Output is correct |
5 |
Correct |
29 ms |
47360 KB |
Output is correct |
6 |
Correct |
230 ms |
48736 KB |
Output is correct |
7 |
Correct |
216 ms |
48632 KB |
Output is correct |
8 |
Correct |
232 ms |
48632 KB |
Output is correct |
9 |
Correct |
207 ms |
48760 KB |
Output is correct |
10 |
Correct |
227 ms |
48732 KB |
Output is correct |
11 |
Correct |
217 ms |
48888 KB |
Output is correct |
12 |
Correct |
222 ms |
48760 KB |
Output is correct |
13 |
Correct |
228 ms |
48888 KB |
Output is correct |
14 |
Correct |
220 ms |
48888 KB |
Output is correct |
15 |
Correct |
230 ms |
48724 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
28 ms |
47360 KB |
Output is correct |
2 |
Correct |
29 ms |
47360 KB |
Output is correct |
3 |
Correct |
28 ms |
47352 KB |
Output is correct |
4 |
Correct |
29 ms |
47360 KB |
Output is correct |
5 |
Correct |
29 ms |
47360 KB |
Output is correct |
6 |
Correct |
230 ms |
48736 KB |
Output is correct |
7 |
Correct |
216 ms |
48632 KB |
Output is correct |
8 |
Correct |
232 ms |
48632 KB |
Output is correct |
9 |
Correct |
207 ms |
48760 KB |
Output is correct |
10 |
Correct |
227 ms |
48732 KB |
Output is correct |
11 |
Correct |
217 ms |
48888 KB |
Output is correct |
12 |
Correct |
222 ms |
48760 KB |
Output is correct |
13 |
Correct |
228 ms |
48888 KB |
Output is correct |
14 |
Correct |
220 ms |
48888 KB |
Output is correct |
15 |
Correct |
230 ms |
48724 KB |
Output is correct |
16 |
Correct |
1637 ms |
57780 KB |
Output is correct |
17 |
Correct |
1641 ms |
57380 KB |
Output is correct |
18 |
Correct |
1633 ms |
57480 KB |
Output is correct |
19 |
Correct |
1470 ms |
57152 KB |
Output is correct |
20 |
Correct |
1633 ms |
57168 KB |
Output is correct |
21 |
Correct |
1615 ms |
58508 KB |
Output is correct |
22 |
Correct |
1646 ms |
58432 KB |
Output is correct |
23 |
Correct |
1595 ms |
58636 KB |
Output is correct |
24 |
Correct |
1617 ms |
58356 KB |
Output is correct |
25 |
Correct |
1638 ms |
57996 KB |
Output is correct |