线段树TLE求调,50pts
查看原帖
线段树TLE求调,50pts
526922
coool楼主2025/1/1 12:07
#include <bits/stdc++.h>
#define int long long 
using namespace std;
const int N = 1e6+23;

int n,m,ans,last,len;
int a[N],t[N << 2];

void pushup(int cur){
	t[cur] = max(t[cur<<1],t[cur<<1|1]);
	return ;
}
// 单点修改 
void update(int cur ,int l, int r, int pos, int val){
	if (l == r && l == pos){
		t[cur] = val;
		return ;
	}
	int mid = l + r >> 1;
	if (pos <= mid) update(cur<<1,l,mid,pos,val);
	else update(cur<<1|1,mid+1,r,pos,val);
	pushup(cur);
}

void query(int cur ,int l, int r, int ql, int qr){
	if (l == r){
		ans = max(ans,t[cur]);
		return;
	}
	int mid = l + r >> 1;
	if (ql <= mid) query(cur<<1,l,mid,ql,qr);
	if (qr > mid) query(cur<<1|1,mid+1,r,ql,qr);
	
}

signed main(){
	cin >> n >> m;	
	for (int i = 1; i <= n; i++){
		char op;
		int k;
		cin >> op >> k;
		if (op == 'Q'){
			int l = len-k+1,r=len;
			ans = 0;
			query(1,1,n,l,r);
			last = ans;
			cout << ans << '\n';
		}
		if (op == 'A'){
			k += last;
			k %= m;
			a[++len] = k;
		
			update(1,1,n,len,k);
		}

	}
//	for (int i =1;  i <= 5; i++) cout << t[i] << ' ';
	return 0;
}
2025/1/1 12:07
加载中...