Submission #1192045

#TimeUsernameProblemLanguageResultExecution timeMemory
1192045TsaganaStreet Lamps (APIO19_street_lamps)C++20
100 / 100
2284 ms55968 KiB
#include<bits/stdc++.h>

#define IOS ios_base::sync_with_stdio(false);cin.tie();cout.tie();
#define all(x) x.begin(), x.end()
#define int long long
#define pq priority_queue
#define eb emplace_back
#define lb lower_bound
#define ub upper_bound
#define pb push_back
#define pp pop_back
#define F first
#define S second

using namespace std;

const int N = 3e5+5;
const int mod = 1e9+7;

int n, q, k, a[N], ans, cnt;
vector<array<int, 3>> tree[4*N];
string s;

void find(int l, int r, int L = 1, int R = n, int id = 1) {
	for (auto x : tree[id]) {
		if (x[0] <= r && r <= x[1]) 
			{ans += x[2]; cnt++;}
	}
	
	int M = (L + R) / 2, x = 2 * id, y = x + 1;
	if (L == R) return ;
	if (l <= M) find(l, r, L, M, x);
	else find(l, r, M + 1, R, y);
}

void add(int l, int r, array<int, 3> v, int L = 1, int R = n, int id = 1) {
	if (L > r || l > R) return ;
	if (L >= l && R <= r) {tree[id].pb(v); return ;}
	int M = (L + R) / 2, x = 2 * id, y = x + 1;
	add(l, r, v, L, M, x), add(l, r, v, M + 1, R, y);
}

void solve () {
	cin >> n >> q >> s;
	
	set<int> ss;
	s = "$" + s;
	for (int i = 1; i <= n; i++) {
		a[i] = s[i] - '0';
		if (!a[i]) ss.insert(i);
	}
	
	for (int i = 1; i <= n; i++) {
		if (!a[i]) continue ;
		int j = i;
		while (j <= n && a[j] == a[i]) j++;
		j--, add(i, j, {i, j, 0}), i = j;
	}

	for (int i = 1; i <= q; i++) {
		cin >> s;
		if (s == "query") {
			int a, b; cin >> a >> b, b--; 
			ans = 0, cnt = 0, find(a, b);
			if (cnt & 1) ans += i;
			cout << ans << "\n";
		}
		else {
			int m; cin >> m;
			if (a[m]) {
				auto L = ss.lb(m);
				auto R = ss.ub(m);
				int r = (L == ss.end() ? n + 1 : *L);	
				int l = (R == ss.begin() ? 0 : *--R);
				add(l+1, m, {m, r-1, i}), ss.insert(m);
			}
			else {
				ss.erase(m);
				auto L = ss.lb(m);
				auto R = ss.ub(m);
				int r = (L == ss.end() ? n + 1 : *L);	
				int l = (R == ss.begin() ? 0 : *--R);
				add(l+1, m, {m, r-1, -i});
			}
			a[m] ^= 1;
		}
	}
}
signed main() {IOS solve(); return 0;}
#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...