社区讨论

线段树求助,根据cmd fc 比较没有差异!!!!

P1531I Hate It参与者 2已保存回复 2

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
2 条
当前快照
1 份
快照标识符
@mi865a21
此快照首次捕获于
2025/11/21 09:15
4 个月前
此快照最后确认于
2025/11/21 09:15
4 个月前
查看原帖
CPP
#include<bits/stdc++.h>
#define ll long long
#define rep(i,a,b) for(register int i=(a);i<=(b);i++)
#define don(i,a,b) for(register int i=(a);i>=(b);i--)
using namespace std;
const int maxn=1e6+10;
const int maxm=1e3+10;
int root[maxn*4],a[maxn];
int m,n;

template <class t> void read(t &x)
{
	x=0;int f=1;char ch=getchar();
	while(!isdigit(ch)){if(ch=='-') f=-1;ch=getchar();}
	while(isdigit(ch)){x=10*x+ch-'0';ch=getchar();}
	x*=f;
}

template <class t> void write(t x)
{
	if(x<0) {putchar('-');x=~x+1;}
	if(x>9) write(x/10);
	putchar(x%10+48);
}

#define lson k<<1
#define rson k<<1|1

/*------------------------------------------------------------------------------------
-------------------------------------------------------------------------------------*/

void pushup(int k)
{
	root[k]=max(root[lson],root[rson]);
}

void buildtree(int k,int l,int r)
{
	if(l==r) {
		root[k]=a[l];
		return;
	}
	int mid=(l+r)/2;
	if(l<=mid) buildtree(lson,l,mid);
	if(mid<r) buildtree(rson,mid+1,r);
	pushup(k);
}

void readdata()
{
	read(n),read(m);
	rep(i,1,n) read(a[i]);
	buildtree(1,1,n);
}

inline ll quary(int l,int r,int x,int y,int k)
{
	if(x>r || y<l) return -1;
	if(x<=l && y>=r) return root[k];
	int mid=(l+r)/2;
	return max(quary(l,mid,x,y,lson),quary(mid+1,r,x,y,rson));
}

void change(int l,int r,int x,int v,int k)
{
	if(r<x || l>x) return;
	if(l==r && l==x) {
		root[k]=v;
		return;
	}
	int mid=(l+r)/2;
	change(l,mid,x,v,lson);
	change(mid+1,r,x,v,rson);
	pushup(k);
}

void work()
{
	rep(i,1,m) {
		char flag;
		int x,y;
		scanf("%c",&flag);
		if(flag=='Q') {
			read(x),read(y);
			write(quary(1,n,x,y,1));
			putchar('\n');
		}
		if(flag=='U') {
			read(x),read(y);
			if(a[x]>y) continue;
			else change(1,n,x,y,1);
		}
	}
}

int main()
{
//	freopen("input.txt","r",stdin);
//	freopen("b.txt","w",stdout);
	readdata();
	work();
	return 0;
}

回复

2 条回复,欢迎继续交流。

正在加载回复...