求助!线段树,样例过了,但是爆零
  • 板块P1531 I Hate It
  • 楼主DYYqwq
  • 当前回复6
  • 已保存回复6
  • 发布时间2022/11/24 19:19
  • 上次更新2023/10/27 01:40:38
查看原帖
求助!线段树,样例过了,但是爆零
719978
DYYqwq楼主2022/11/24 19:19

rt,求dalao救命

#include<bits/stdc++.h>
#define lson(root) (root << 1)
#define rson(root) (root << 1 | 1)
using namespace std;
int n , t;
int a[200010] , mx[800010];
void pushup(int root)
{
	mx[root] = max(mx[lson(root)] , mx[rson(root)]);
}
void update(int root , int l , int r , int x , int y)
{
	if(l == r)
	{
		mx[root] = max(mx[root] , y);
		return;
	}
	int mid = (l + r) >> 1;
	if(x <= mid)
		update(lson(root) , l , mid , x , y);
	else
		update(rson(root) , mid + 1 , r , x , y);
	pushup(root);
}
int query(int root , int l , int r , int L , int R)
{
	int mid = (l + r) >> 1;
	if(L <= l && R >= r)
		return mx[root];
	int ans = -2147483648;
	if(L <= mid)
		ans = max(ans , query(lson(root) , l , mid , L , R));
	if(R > mid)
		ans = max(ans , query(rson(root) , mid + 1 , r , L , R));
	return ans;
}
void build(int root , int l , int r)
{
	int mid = (l + r) >> 1;
	if(l == r)
	{
		mx[root] = a[l];
		return;
	}
	build(lson(root) , l , mid);
	build(rson(root) , mid + 1 , r);
	pushup(root);
}
int main()
{
	scanf("%d%d" , &n , &t);
	for(int i = 1 ; i <= n ; i ++)
		scanf("%d" , &a[i]);
	build(1 , 1 , n);
	while(t --)
	{
		char op;
		int x , y;
		cin >> op;
		scanf("%d%d" , &x , &y);
		if(op == 'U')
			update(1 , 1 , n , x , y);
		else
			printf("%d\n" , query(1 , 1 , n , x , y));
	}
	return 0;
}
2022/11/24 19:19
加载中...