线段树0分求调
查看原帖
线段树0分求调
459188
zrt090604楼主2024/8/29 19:42
#include<bits/stdc++.h>
using namespace std;
const int N = 2e5 + 5;
typedef long long ll;
int m, d, n, len;
ll tr[N<<2], las;
char s;
void add(int p, int l, int r, int w, int v) {
	if(l == r) {
		tr[p] = v;
		return;
	}
	int mid = (l+r) >> 1;
	if(w <= mid) add(p*2, l, mid, w, v);
	else add(p*2+1, mid+1, r, w, v);
	tr[p] = max(tr[p*2], tr[p*2+1]);
}
ll query(int p, int l, int r, int s, int t) {
	if(s<=l && r<=t) return tr[p];
	int mid = (l+r) >> 1;
	ll sum = -1e18;
	if(s <= mid) sum = query(p*2, l, mid, s, t);
	if(t > mid) sum = max(sum, query(p*2+1, mid+1, r, s, t));
	return sum;
}
int main () {
	scanf("%d%d", &m, &d);
	while(m--) {
		cin >> s;
		if(s == 'A') {
			scanf("%d", &n); 
			++len;
			printf("%d\n", len);
			add(1, 1, m, len, (n+las)%d);
		}
		else {
			scanf("%d", &n);
			if(!n) las = 0;
			else las = query(1, 1, m, len-n+1, m);
			printf("%lld\n", las);
		}
	}
	return 0;
}
2024/8/29 19:42
加载中...