Submission #916382

# Submission time Handle Problem Language Result Execution time Memory
916382 2024-01-25T19:18:02 Z EJIC_B_KEDAX Modern Machine (JOI23_ho_t5) C++17
15 / 100
3000 ms 4316 KB
#include <bits/stdc++.h>

#define x first
#define y second

using ll = long long;

using namespace std;

const int N = 1 << 17, M = 120120;
int st[2 * N], lazy[2 * N], a[N], b[M];

void build() {
	for (int i = N - 1; i < 2 * N - 1; i++) {
		st[i] = a[i - N + 1];
		lazy[i] = -1;
	}
	for (int i = N - 2; i >= 0; i--) {
		st[i] = st[2 * i + 1] + st[2 * i + 2];
		lazy[i] = -1;
	}
}

void update_seg(int l, int r, int v, int l1 = 0, int r1 = N - 1, int i = 0) {
	if (l1 >= l && r1 <= r) {
		st[i] = v * (r1 - l1 + 1);
		lazy[i] = v;
		return;
	}
	if (l1 > r || r1 < l) {
		return;
	}
	if (lazy[i] != -1) {
		st[2 * i + 1] = lazy[i] * (r1 - l1 + 1) / 2;
		st[2 * i + 2] = lazy[i] * (r1 - l1 + 1) / 2;
		lazy[2 * i + 1] = lazy[i];
		lazy[2 * i + 2] = lazy[i];
		lazy[i] = -1;
	}
	update_seg(l, r, v, l1, (l1 + r1) / 2, 2 * i + 1);
	update_seg(l, r, v, (l1 + r1) / 2 + 1, r1, 2 * i + 2);
	st[i] = st[2 * i + 1] + st[2 * i + 2];
}

int get_sum(int l, int r, int l1 = 0, int r1 = N - 1, int i = 0) {
	if (l1 >= l && r1 <= r) {
		return st[i];
	}
	if (l1 > r || r1 < l) {
		return 0;
	}
	if (lazy[i] != -1) {
		st[2 * i + 1] = lazy[i] * (r1 - l1 + 1) / 2;
		st[2 * i + 2] = lazy[i] * (r1 - l1 + 1) / 2;
		lazy[2 * i + 1] = lazy[i];
		lazy[2 * i + 2] = lazy[i];
		lazy[i] = -1;
	}
	return get_sum(l, r, l1, (l1 + r1) / 2, 2 * i + 1) + get_sum(l, r, (l1 + r1) / 2 + 1, r1, 2 * i + 2);
}

int down_l(int l, int r, int s, int l1 = 0, int r1 = N - 1, int i = 0) {
	if (l1 > r || r1 < l) {
		return -1;
	}
	if (s > st[i]) {
		return -1;
	}
	if (l1 == r1 && s == st[i] && l1 >= l && r1 <= r) {
		return l1;
	} else if (l1 == r1) {
		return -1;
	}
	if (lazy[i] != -1) {
		st[2 * i + 1] = lazy[i] * (r1 - l1 + 1) / 2;
		st[2 * i + 2] = lazy[i] * (r1 - l1 + 1) / 2;
		lazy[2 * i + 1] = lazy[i];
		lazy[2 * i + 2] = lazy[i];
		lazy[i] = -1;
	}
	int v = get_sum(max(l, (l1 + r1) / 2 + 1), min(r, r1));
	int left = down_l(l, r, s - v, l1, (l1 + r1) / 2, 2 * i + 1);
	if (left == -1) {
		return down_l(l, r, s, (l1 + r1) / 2 + 1, r1, 2 * i + 2);
	}
	return left;
}

int down_r(int l, int r, int s, int l1 = 0, int r1 = N - 1, int i = 0) {
	if (l1 > r || r1 < l) {
		return -1;
	}
	if (s > r1 - l1 + 1 - st[i]) {
		return -1;
	}
	if (l1 == r1 && s == 1 - st[i] && l1 >= l && r1 <= r) {
		return l1;
	} else if (l1 == r1) {
		return -1;
	}
	if (lazy[i] != -1) {
		st[2 * i + 1] = lazy[i] * (r1 - l1 + 1) / 2;
		st[2 * i + 2] = lazy[i] * (r1 - l1 + 1) / 2;
		lazy[2 * i + 1] = lazy[i];
		lazy[2 * i + 2] = lazy[i];
		lazy[i] = -1;
	}
	int v = max(min(r, (l1 + r1) / 2) - max(l, l1) + 1 - get_sum(max(l, l1), min(r, (l1 + r1) / 2)), 0);
	int right = down_r(l, r, s - v, (l1 + r1) / 2 + 1, r1, 2 * i + 2);
	if (right == -1) {
		return down_r(l, r, s, l1, (l1 + r1) / 2, 2 * i + 1);
	}
	return right;
}

int32_t main() {
	int n, m;
	cin >> n >> m;
	string as;
	cin >> as;
	for (int i = 0; i < n; i++) {
		a[i] = as[i] == 'B' ? 0 : 1;
	}
	for (int i = 0; i < m; i++) {
		cin >> b[i]; b[i]--;
	}
	// cout << "!!\n";
	int q;
	cin >> q;
	while (q--) {
		int l, r;
		cin >> l >> r; l--; r--;
		build();
		// cout << "!\n";
		for (int i = l; i <= r; i++) {
			int sl = get_sum(0, b[i] - 1), sr = n - b[i] - 1 - get_sum(b[i] + 1, n - 1);
			// cout << sl << ' ' << sr << '\n';
			if (sl < sr) {
				int gr = down_r(b[i] + 1, n - 1, sl + 1);
				// cout << "! " << gr << '\n';
				update_seg(0, gr, 1);
			} else {
				int gr = down_l(0, b[i] - 1, sr);
				// cout << "! " << gr << '\n';
				if (gr == -1) {
					gr = b[i];
				}
				update_seg(gr, n - 1, 0);
			}
		}
		cout << st[0] << '\n';
	}
}
# Verdict Execution time Memory Grader output
1 Correct 1 ms 3164 KB Output is correct
2 Correct 1 ms 3164 KB Output is correct
3 Correct 1 ms 3164 KB Output is correct
4 Correct 1 ms 3164 KB Output is correct
5 Correct 1 ms 3164 KB Output is correct
6 Correct 2 ms 3164 KB Output is correct
7 Correct 2 ms 3264 KB Output is correct
8 Correct 4 ms 3164 KB Output is correct
9 Correct 1 ms 3164 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 1 ms 3164 KB Output is correct
2 Correct 1 ms 3164 KB Output is correct
3 Correct 1 ms 3164 KB Output is correct
4 Correct 1 ms 3164 KB Output is correct
5 Correct 1 ms 3164 KB Output is correct
6 Correct 2 ms 3164 KB Output is correct
7 Correct 2 ms 3264 KB Output is correct
8 Correct 4 ms 3164 KB Output is correct
9 Correct 1 ms 3164 KB Output is correct
10 Correct 1663 ms 3348 KB Output is correct
11 Correct 639 ms 3352 KB Output is correct
12 Correct 916 ms 3360 KB Output is correct
13 Correct 1247 ms 3368 KB Output is correct
14 Correct 2604 ms 3348 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 1 ms 3164 KB Output is correct
2 Correct 1 ms 3164 KB Output is correct
3 Correct 1 ms 3164 KB Output is correct
4 Correct 1 ms 3164 KB Output is correct
5 Correct 1 ms 3164 KB Output is correct
6 Correct 2 ms 3164 KB Output is correct
7 Correct 2 ms 3264 KB Output is correct
8 Correct 4 ms 3164 KB Output is correct
9 Correct 1 ms 3164 KB Output is correct
10 Correct 1663 ms 3348 KB Output is correct
11 Correct 639 ms 3352 KB Output is correct
12 Correct 916 ms 3360 KB Output is correct
13 Correct 1247 ms 3368 KB Output is correct
14 Correct 2604 ms 3348 KB Output is correct
15 Correct 1 ms 3164 KB Output is correct
16 Correct 2 ms 3164 KB Output is correct
17 Correct 2 ms 3164 KB Output is correct
18 Execution timed out 3083 ms 4316 KB Time limit exceeded
19 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 2 ms 3164 KB Output is correct
2 Execution timed out 3053 ms 3948 KB Time limit exceeded
3 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 2 ms 3164 KB Output is correct
2 Execution timed out 3053 ms 3948 KB Time limit exceeded
3 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 2 ms 3164 KB Output is correct
2 Execution timed out 3053 ms 3948 KB Time limit exceeded
3 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 1 ms 3164 KB Output is correct
2 Correct 1 ms 3164 KB Output is correct
3 Correct 1 ms 3164 KB Output is correct
4 Correct 1 ms 3164 KB Output is correct
5 Correct 1 ms 3164 KB Output is correct
6 Correct 2 ms 3164 KB Output is correct
7 Correct 2 ms 3264 KB Output is correct
8 Correct 4 ms 3164 KB Output is correct
9 Correct 1 ms 3164 KB Output is correct
10 Correct 1663 ms 3348 KB Output is correct
11 Correct 639 ms 3352 KB Output is correct
12 Correct 916 ms 3360 KB Output is correct
13 Correct 1247 ms 3368 KB Output is correct
14 Correct 2604 ms 3348 KB Output is correct
15 Correct 1 ms 3164 KB Output is correct
16 Correct 2 ms 3164 KB Output is correct
17 Correct 2 ms 3164 KB Output is correct
18 Execution timed out 3083 ms 4316 KB Time limit exceeded
19 Halted 0 ms 0 KB -