P1253玄学评测
  • 板块灌水区
  • 楼主Rorre_y
  • 当前回复0
  • 已保存回复0
  • 发布时间2024/9/28 21:45
  • 上次更新2024/9/29 11:54:55
查看原帖
P1253玄学评测
608775
Rorre_y楼主2024/9/28 21:45

已经改的跟第二篇题解一样了,就是死活过不去#10,whatcanisay。玄关求调。

原题链接

#include<bits/stdc++.h>
using namespace std;
long long n,m,a[1000010],tag[4000040],tag2[4000040],tr[4000040];
long long cnt=-10000000000000000;//-9223372036854775808
inline long long read(){
    long long x=0,f=1;char ch=getchar();
    while (!isdigit(ch)){if (ch=='-') f=-1;ch=getchar();}
    while (isdigit(ch)){x=x*10+ch-48;ch=getchar();}
    return x*f;
}
inline void up(long long x){//gengxin
	tr[x]=max(tr[x*2],tr[x*2+1]);
}
inline void tagg2(long long x,long long k){//biaoji2
	tag[x]=0;
	tr[x]=k;
	tag2[x]=k;
}
inline void down2(long long x){//xiafang(gai)
	if(tag2[x]!=cnt){
		tagg2(x*2,tag2[x]);
		tagg2(x*2+1,tag2[x]);
		tag2[x]=cnt;
	}
}
inline void tagg(long long x,long long k){//biaoji
	tr[x]+=k;
	tag[x]+=k;
}
inline void down1(long long x){//xiafang(jia)
	if(tag[x]){
		down2(x);
		tagg(x*2,tag[x]);
		tagg(x*2+1,tag[x]);
		tag[x]=0;
	}
}
inline void down(long long x){//xiafang
	down2(x);
	down1(x);
}
inline void build(long long x,long long l,long long r){
	if(l==r){
		tr[x]=a[l];
		tag2[x]=cnt;
		tag[x]=0;
		return;
	}
	long long mid=(l+r)/2;
	build(x*2,l,mid);
	build(x*2+1,mid+1,r);
	up(x);
}
inline void gai1(long long nl,long long nr,long long l,long long r,long long x,long long k){
	if(nl<=l&&r<=nr){
		down2(x);
		tr[x]+=k;
		tag[x]+=k;
		return;
	}
	down(x);
	long long mid=(l+r)/2;
	if(nl<=mid)gai1(nl,nr,l,mid,x*2,k);
	if(nr>=mid+1)gai1(nl,nr,mid+1,r,x*2+1,k);
	up(x);
}
inline void gai2(long long nl,long long nr,long long l,long long r,long long x,long long k){
	if(nl<=l&&r<=nr){
		tag[x]=0;
		tr[x]=k;
		tag2[x]=k;
		return;
	}
	down(x);
	long long mid=(l+r)/2;
	if(nl<=mid)gai2(nl,nr,l,mid,x*2,k);
	if(nr>=mid+1)gai2(nl,nr,mid+1,r,x*2+1,k);
	up(x);
}
inline long long cha(long long nl,long long nr,long long l,long long r,long long x){
	if(nl<=l&&r<=nr){
		return tr[x];
	}
	down(x);
	long long mid=(l+r)/2;
	long long ans=-9223372036854775808; 
	if(nl<=mid)ans=max(cha(nl,nr,l,mid,x*2),ans);
	if(nr>=mid+1)ans=max(cha(nl,nr,mid+1,r,x*2+1),ans);
	return ans;
}
int main()
{
	long long aa,b,c,d;
	n=read();
	m=read();
	for(long long i=1;i<=n;i++){
		a[i]=read();
	}
	build(1,1,n);
	for(long long i=1;i<=n*4;i++){
		tag2[i]=cnt;
	}
	for(long long i=1;i<=m;i++){
		aa=read();
		if(aa==1){
			b=read();
			c=read();
			d=read();
			gai2(b,c,1,n,1,d);
		}
		else if(aa==2){
			b=read();
			c=read();
			d=read();
			gai1(b,c,1,n,1,d);
		}
		else{
			b=read();
			c=read();
			printf("%lld\n",cha(b,c,1,n,1));
		}
	}
}
2024/9/28 21:45
加载中...