为啥这老线段树全是 0 啊
查看原帖
为啥这老线段树全是 0 啊
719978
DYYqwq楼主2024/11/5 18:20
#include<bits/stdc++.h>
#define int long long
#define lson(root) (root << 1)
#define rson(root) (root << 1 | 1)
using namespace std;
struct node
{
	int mx;
}tree[800010];
int m , mod , cnt , lst;
void pushup(int root)
{
	tree[root].mx = max(tree[lson(root)].mx , tree[rson(root)].mx);
}
void update(int root , int l , int r , int pos , int val)
{
	if(l == r)
	{
		tree[root].mx = val;
		return;
	}
	int mid = (l + r) >> 1;
	if(pos <= mid) update(lson(root) , l , mid , pos , val);
	else update(rson(root) , mid + 1 , r , pos , val);
	pushup(root);
}
int query(int root , int l , int r , int L , int R)
{
	if(L <= l && R >= r) return tree[root].mx;
	int mid = (l + r) >> 1 , mx = 0;
	if(L <= mid) mx = max(mx , query(lson(root) , l , mid , L , R));
	if(R > mid) mx = max(mx , query(rson(root) , mid + 1 , r , L , R));
	return mx;
}
void build(int root , int l , int r)
{
	if(l == r)
	{
		tree[root].mx = -1e18;
		return;
	}
	int mid = (l + r) >> 1;
	build(lson(root) , l , mid);
	build(rson(root) , mid + 1 , r);
	pushup(root);
}
signed main()
{
	scanf("%lld%lld" , &m , &mod);
	build(1 , 1 , m);
	for(int i = 1 ; i <= m ; i ++)
	{
		char op;
		int x;
		cin >> op; scanf("%lld" , &x);
		x %= mod;
		if(op == 'Q') lst = query(1 , 1 , m , cnt - x + 1 , cnt) , printf("%lld\n" , lst);
		else cnt ++ , update(1 , 1 , m , cnt , lst);
	}
	return 0;
}
2024/11/5 18:20
加载中...