Submission #1266180

#TimeUsernameProblemLanguageResultExecution timeMemory
1266180g4yuhgElection (BOI18_election)C++20
100 / 100
295 ms20396 KiB
//Huyduocdithitp
#include <bits/stdc++.h>
typedef int ll;
#define pii pair<ll, ll> 
#define MP make_pair
#define fi first
#define se second
#define TASK "connect"
#define faster ios_base::sync_with_stdio(false);cin.tie(NULL);
#define N 500005
#define LOG 18
#define endl '\n'
using namespace std;

ll n, q;
string s;

struct Node {
	ll L, R, S, A;
} st[4 * N];

Node cb(Node u, Node v) {
	Node w;
	w.L = max(u.L, u.S + v.L);
	w.R = max(v.R, v.S + u.R);
	w.S = u.S + v.S;
	w.A = max({u.A + v.S, u.S + v.A, u.L + v.R});
	return w;
}

void build(ll id, ll l, ll r) {
	if (l == r) {
		if (s[l] == 'C') {
			st[id] = {0, 0, -1, 0};
		}
		else {
			st[id] = {1, 1, 1, 1};
		}
		return;
	}
	ll mid = (l + r) / 2;
	build(id * 2, l, mid);
	build(id * 2 + 1, mid + 1, r);
	st[id] = cb(st[id * 2], st[id * 2 + 1]);
}

Node get(ll id, ll l, ll r, ll L, ll R) {
	if (l > R || r < L) return {0, 0, 0, 0};
	if (L <= l && r <= R) return st[id];
	ll mid = (l + r) / 2;
	return cb(get(id * 2, l, mid, L, R), get(id * 2 + 1, mid + 1, r, L, R));
}

signed main(void) {
	faster;
	
	cin >> n;
	cin >> s;
	cin >> q;
	s = '*' + s;
	build(1, 1, n);
	for (int i = 1; i <= q; i ++) {
		ll l, r;
		cin >> l >> r;
		cout << get(1, 1, n, l, r).A << endl;
	}
	
	
	return 0;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...