20ptsWA求条
查看原帖
20ptsWA求条
934048
ni_ju_ge楼主2025/7/20 15:54

rt

record

#include<bits/stdc++.h>
#define int long long
using namespace std;
const int N=1e5+5;
struct node {
	int l,r,sm,mn;
} tr[4*N];
int n,m;
int a[N],b[N];
void upd(int pos) {
	tr[pos].sm=tr[pos*2].sm+tr[pos*2+1].sm;
	tr[pos].mn=min(tr[pos*2].mn,tr[pos*2+1].mn);
}
void build(int pos,int l,int r) {
	tr[pos].l=l;
	tr[pos].r=r;
	if(l==r) {
		tr[pos].sm=a[l]+b[l];
		tr[pos].mn=a[l]*b[l];
		return;
	}
	int mid=(l+r)/2;
	build(pos*2,l,mid);build(pos*2+1,mid+1,r);
	tr[pos].sm=tr[pos*2].sm+tr[pos*2+1].sm;
	tr[pos].mn=min(tr[pos*2].mn,tr[pos*2+1].mn);
	upd(pos);
}
void spl(int pos,int l,int r,int lim,int val) {
	if(tr[pos].r<l||tr[pos].l>r) return;
	if(tr[pos].mn>lim) return;
	else {
		if(tr[pos].l==tr[pos].r) {
			tr[pos].sm+=2*val;
			a[l]+=val,b[l]+=val;
			tr[pos].mn=a[l]*b[l];
			return;
		}
		spl(pos*2,l,r,lim,val);
		spl(pos*2+1,l,r,lim,val);
		upd(pos);
	}
}
void sst(int pos,int gol,int aval,int bval) {
	if(tr[pos].r<gol||tr[pos].l>gol) return;
	if(tr[pos].l==tr[pos].r) {
		tr[pos].sm=aval+bval;
		a[gol]=aval,b[gol]=bval;
		tr[pos].mn=aval*bval;
		return;
	}
	sst(pos*2,gol,aval,bval);
	sst(pos*2+1,gol,aval,bval);
	upd(pos);
}
int ssc(int pos,int l,int r) {
	if(tr[pos].r<l||tr[pos].l>r) return 0;
	if(tr[pos].l>=l&&tr[pos].r<=r) return tr[pos].sm;
	int res=0;
	res+=ssc(pos*2,l,r)+ssc(pos*2+1,l,r);
	return res;
}
int x,y,k,t,opt;
signed main() {
	cin>>n>>m;
	for(int i=1;i<=n;i++) scanf("%lld",&a[i]);
	for(int i=1;i<=n;i++) scanf("%lld",&b[i]);
	build(1,1,n);
	for(int i=1;i<=m;i++) {
		scanf("%lld",&opt);
		if(opt==1) {
			scanf("%lld %lld %lld %lld",&x,&y,&k,&t);
			spl(1,x,y,k,t);
		}
		if(opt==2) {
			scanf("%lld %lld %lld",&k,&x,&y);
			sst(1,k,x,y);
		}
		if(opt==3) {
			scanf("%lld %lld",&x,&y);
			printf("%lld\n",ssc(1,x,y));
		}
	}
}
2025/7/20 15:54
加载中...