求助为什么输入样例时会运行错误
  • 板块P2357 守墓人
  • 楼主Good_Study
  • 当前回复0
  • 已保存回复0
  • 发布时间2024/10/24 18:55
  • 上次更新2024/10/24 19:57:26
查看原帖
求助为什么输入样例时会运行错误
1417434
Good_Study楼主2024/10/24 18:55
#include<bits/stdc++.h>
using namespace std;
#define lson rt*2
#define rson rt*2+1
#define midd (l+r)/2
const int maxn=2e5+6;
int n,f;
long long ans,tree[maxn<<2],lazy[maxn<<2];
void add(int rt){
	tree[rt]=tree[lson]+tree[rson];
} 
void pushup(int rt){
	tree[rt]=tree[lson]+tree[rson];
}
void pushdown(int l,int r,int rt){
	if(lazy[rt]){
		lazy[lson]+=lazy[rt];
		lazy[rson]+=lazy[rt];
		int mid=midd;
		tree[lson]+=lazy[rt]*(mid-l+1);
		tree[rson]+=lazy[rt]*(r-mid);
		lazy[rt]=0;
	}
}
void biuld(int l,int r,int rt){
	if(l==r){
		cin>>tree[rt];
		return;
	}
	int mid=midd;
	biuld(1,mid,lson);
	biuld(mid+1,r,rson);
	pushup(rt);
}
void updata(int l,int r,int rt,int ql,int qr,int x){
	if(ql<=l&&qr>=r){
		tree[rt]+=x*(r-l+1);
		lazy[rt]+=x;
		return; 
	}
	pushdown(l,r,rt);
	int mid=midd;
	if(mid>=qr)
	updata(l,mid,lson,ql,qr,x);
	else if(mid<ql)
	updata(mid+1,r,rson,ql,qr,x);
	else{
		updata(l,mid,lson,ql,qr,x);
		updata(mid+1,r,rson,ql,qr,x);
	}
	pushup(rt);
}
void update(int l,int r,int rt,int x,int val){
	if(l==x&&r==x){
		tree[rt]+=val;
		return;
	}
	int mid=midd;
	if(mid<r&&mid>=x)
	update(1,mid,lson,x,val);
	else
	update(mid+1,r,rson,x,val);
	add(rt);
}
void updete(int l,int r,int rt,int x,int val){
	if(l==x&&r==x){
		tree[rt]-=val;
		return;
	}
	int mid=midd;
	if(mid<r&&mid>=x)
	update(1,mid,lson,x,val);
	else
	update(mid+1,r,rson,x,val);
	add(rt);
}
long long queryzhu(int l,int r,int rt){
	if(l==1&&r==1)return tree[rt];
	queryzhu(1,midd,lson);
}
void query(int l,int r,int rt,int ql,int qr){
	int mid=midd;
	if(l>=ql&&r<=qr){
		ans+=tree[rt];
		return;
	}
	pushdown(rt,l,r);
	if(qr<=mid)
	query(1,mid,lson,ql,qr);
	else if(ql>mid) query(mid+1,r,rson,ql,qr);
	else{
		query(1,mid,lson,ql,qr);
		query(mid+1,r,rson,ql,qr);
	}
}
int main() 
{
	ios::sync_with_stdio(false);
	cin>>n>>f;
	biuld(1,n,1);
	for(int i=1,op,l,r,k;i<=f;i++){
		cin>>op;
		if(op==1){
			cin>>l>>r>>k;
			updata(1,n,1,l,r,k);
		}
		else if(op==2){
			cin>>k;
			update(1,n,1,1,k);
		}
		else if(op==3){
			cin>>k;
			updete(1,n,1,1,k);
		}
		else if(op==4){
			ans=0;
			cin>>l>>r;
			query(1,n,1,l,r);
			cout<<ans<<endl;
		}
		else if(op==5){
			cout<<queryzhu(1,n,1)<<endl;
		}
	}
	return 0;
}
2024/10/24 18:55
加载中...