求助,为什么没有输出?
  • 板块P1531 I Hate It
  • 楼主Gumbo
  • 当前回复1
  • 已保存回复1
  • 发布时间2021/8/6 11:05
  • 上次更新2023/11/4 11:51:23
查看原帖
求助,为什么没有输出?
478861
Gumbo楼主2021/8/6 11:05
#include<cstdio>
#define mx(a,b) (a>b?a:b)
using namespace std;
struct node{
	int l,r;
	node*lc,*rc;
	long long num;
}*gen;
long long inp[200005];
inline long long readl(void){
	long long ans=0,x=1;
	register char us=getchar();
	while(us>'9'||us<'0'){
		if(us=='-')x=-1;
		us=getchar();
	}
	while(us>='0'&&us<='9'){
		ans=(ans<<3)+(ans<<1)+(us^48);
		us=getchar();
	}
	return ans*x;
}
inline int read(void){
	register int ans=0,x=1;
	register char us=getchar();
	while(us<'0'||us>='9'){
		if(us=='-')x=-1;
		us=getchar();
	}
	while(us>='0'&&us<='9'){
		ans=(ans<<1)+(ans<<3)+(us^48);
		us=getchar();
	}
	return ans*x;
}
inline void build(node*nw,int l,int r){
	nw->l=l;nw->r=r;
	if(l==r){
		nw->num=inp[l];
		nw->lc=nw->rc=NULL;
	}
	else{
		nw->lc=new node;
		nw->rc=new node;
		build(nw->lc,l,l+r>>1);
		build(nw->rc,(l+r>>1)+1,r);
		nw->num=mx(nw->lc->num,nw->rc->num);
	}
	return;
}
inline void change(node*nw,int x,int n){
	if(nw->l==x&&nw->r==x&&nw->num<n)nw->num=n;
	if(nw->rc==NULL)return;
	if(x<=nw->l+nw->r>>1)change(nw->lc,x,n);
	else change(nw->rc,x,n);
	nw->num=mx(nw->lc->num,nw->rc->num);
	return;
}
inline long long ask(node*nw,int l,int r){
	if(nw->l>=l&&nw->r<=r)return nw->num;
	long long ans=0;
	if(nw->l+nw->r>>1>=l)ans=mx(ans,ask(nw->lc,l,r));
	if(nw->l+nw->r>>1<r)ans=mx(ans,ask(nw->rc,l,r));
	return ans;
}
int main(){
	int n,m;
	gen=new node;
	n=read();m=read();
	register int i;
	long long l,r;
	for(i=1;i<=n;++i)inp[i]=readl();
		
		
		
	build(gen,1,n);
	register char c;
	for(i=0;i<m;++i){
		scanf("%c",&c);l=readl();r=readl();
		if(c=='Q')printf("%lld\n",ask(gen,l,r));
		if(c=='U')change(gen,l,r);
	}
	return 0;
}
2021/8/6 11:05
加载中...