제출 #1325618

#제출 시각아이디문제언어결과실행 시간메모리
1325618muhammad-ahmad입자 가속기 (IZhO11_collider)C++20
0 / 100
0 ms332 KiB
#include <bits/stdc++.h>
using namespace std;

#define endl '\n';

const int N = 1e6 + 5;

int n, q, T[4 * N], lazy[4 * N];

void push(int v){
	int lc = 2 * v, rc = lc + 1;
	T[lc] += lazy[v];
	lazy[lc] += lazy[v];
	T[rc] += lazy[v];
	lazy[rc] += lazy[v];
	lazy[v] = 0;
}

void upd(int x, int l, int r, int v = 1, int s = 1, int e = n + 1){
	if (e <= l || r <= s) return;
	if (l <= s && e <= r){
		T[v] += x;
		lazy[v] += x;
		return;
	}
	
	int lc = 2 * v, rc = lc + 1, mid = (s + e) / 2;
	
	push(v);
	upd(x, l, r, lc, s, mid);
	upd(x, l, r, rc, mid, e);
	
	T[v] = T[lc] + T[rc];
}

int query(int idx, int v = 1, int s = 1, int e = n + 1){
	if (idx < s or e <= idx) return 0;
	if (idx == s && e - s == 1) return T[v];
	
	int lc = 2 * v, rc = lc + 1, mid = (s + e) / 2;
	
	push(v);
	if (idx < mid) return query(idx, lc, s, mid);
	else return query(idx, rc, mid, e);
	
}

int main(){
	cin >> n >> q;
	string s; cin >> s;
	s = "." + s;
	for (int Q = 1; Q <= q; Q++){	
		char t; cin >> t;
		if (t == 'a'){
			int i, j; cin >> i >> j;
			if (i <= j){
				upd(1, i, j);
			}
			else {
				upd(-1, j, i);
			}
			upd(i - j, j, j + 1);
		}
		else {
			int i; cin >> i;
			// cout << i << ' ' << query(i) << endl;
			cout << s[i + query(i)] << endl;
		}
	}
}
#Verdict Execution timeMemoryGrader output
Fetching results...