MLE求助
查看原帖
MLE求助
655082
YuTianQwQ楼主2023/12/14 15:22
#include <bits/stdc++.h>
using namespace std;
#define int long long
const int maxn = 2e5 + 5;
int tree[4 * maxn];
 
void pushup(int i)
{
	tree[i] = max(tree[i << 1], tree[i << 1 | 1]);
}
 
void build(int i, int l, int r)
{
	if(l == r)
	{
		tree[i] = 0;
		return;
	}
	int mid = (l + r) / 2;
	build(i << 1, l, mid);
	build(i << 1 | 1, mid + 1, r);
	pushup(i);
}
 
void update(int i, int l, int r, int x, int val)
{
	if(l == r)
	{
		tree[i] = val;
		return;
	}
	int mid = (l + r) / 2;
	if (x <= mid) update(i << 1, l, mid, x, val);
	else update(i << 1 | 1, mid + 1, r, x, val);
	pushup(i);
}
 
int query(int i, int l, int r, int x, int y)
{
	if(x <= l && r <= y) return tree[i];
	int maxm = 0;
	int mid = (l + r) / 2;
	if(x <= mid) maxm = max(maxm, query(i << 1, l, mid, x, y));
	if(y > mid) maxm = max(maxm, query(i << 1 | 1, mid + 1, r, x, y));
	return maxm;
}
 
signed main()
{
	int n, m;
	cin >> n >> m;
	int b, cnt = 1;
	char opt;
	build(1, 1, n);
	int lst = 0;
	while(n--)
	{
		cin >> opt;
		while(opt != 'A' && opt != 'Q') cin >> opt;
		cin >> b;
		if(opt == 'Q')
		{
			int tmp = cnt - b;
			lst = query(1, 1, n, tmp, cnt);
			printf("%d\n", lst);
		}
		if(opt == 'A')
		{
			update(1, 1, n, cnt, (b + lst) % m);
			cnt++;
		}
	}
}
2023/12/14 15:22
加载中...