社区讨论

蒟蒻线段树求调

P1253扶苏的问题参与者 4已保存回复 3

讨论操作

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

当前回复
3 条
当前快照
1 份
快照标识符
@lo89g7l5
此快照首次捕获于
2023/10/27 14:57
2 年前
此快照最后确认于
2023/10/27 14:57
2 年前
查看原帖
CPP
#include<bits/stdc++.h>
#define N 10000086
#define int long long
using namespace std;
const int M=214748364700;
int n,m,a[N],dat[N],lazy[N],mul[N];
void build(int x,int l,int r) {
	if(l==r) {
		dat[x]=a[l];
		lazy[x]=0;
		mul[x]=-M;
		return;
	}
	int mid=(l+r)>>1;
	build(x*2,l,mid);
	build(x*2+1,mid+1,r);
	dat[x]=max(dat[x*2],dat[x*2+1]);
}
inline void down2(int x) {
	if(mul[x]!=-M) {
		lazy[x<<1]=lazy[x<<1|1]=0;
		mul[x<<1]=mul[x<<1|1]=mul[x];
		dat[x<<1]=dat[x<<1|1]=mul[x];
		mul[x]=-M;
	}
}
inline void down1(int x) {
	if(lazy[x]) {
		down2(x);
		dat[x<<1]+=lazy[x],dat[x<<1|1]+=lazy[x];
		lazy[x<<1]+=lazy[x],lazy[x<<1|1]+=lazy[x];
		lazy[x]=0;
	} 
}
inline void pushdown(int x) {
	down2(x),down1(x);	
}
inline void Change1(int L,int R,int l,int r,int x,int p) {//+
	if(L<=l&&R>=r) {
		down2(x);
		dat[x]+=p;
		lazy[x]+=p;
		return;
	}
	pushdown(x);
	int mid=(l+r)>>1;
	if(L<=mid)Change1(L,R,l,mid,x<<1,p);
	if(R>mid)Change1(L,R,mid+1,r,x<<1|1,p);
	dat[x]=max(dat[x<<1],dat[x<<1|1]);
}
inline void Change2(int L,int R,int l,int r,int x,int p) {
	if(L<=l&&R>=r){
		lazy[x]=0;
		dat[x]=p;
		mul[x]=p;
		return;
	}
	pushdown(x);
	int mid=(l+r)>>1;
	if(L<=mid)Change2(L,R,l,mid,x<<1,p);
	if(R>mid)Change2(L,R,mid+1,r,x<<1|1,p);
	dat[x]=max(dat[x<<1],dat[x<<1|1]);
}
int qjck(int L, int R, int l, int r, int p) {
	if(L<=l&&r<=R) return dat[p];
	int mid=(l+r)>>1, res=-M;
	if(mid>=L)res=max(res, qjck(L,R,l,mid,p<<1));
	if(mid<=R)res=max(res, qjck(L,R,mid+1,r,p<<1|1));
	return res;
}
signed main() {
	ios::sync_with_stdio(0);
	cin.tie(0);  
	cin>>n>>m;
	for(int i=1; i<=n; i++)
		cin>>a[i];
	build(1,1,n);
	for (int i = 1;i <= n * 4; ++ i) mul[i] = -M;
	for(int j=1; j<=m; j++) {
		int s,x,y,k;
		cin>>s>>x>>y;
		if(s==3) {
			cout<<qjck(1,n,x,y,1)<<'\n';
		} 
		else {
			cin>>k;
			if(s==1)Change2(1,n,x,y,1,k);
			else Change1(1,n,x,y,1,k);
		}
	}
	return 0;
}


回复

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

正在加载回复...