求助~~不会调
查看原帖
求助~~不会调
377876
lbc20070331楼主2022/11/20 23:22
#include<bits/stdc++.h>
using namespace std;
#define raed read
const int mx=1e6+23;
int t,pos=0;
int n,q;
int a[mx],b[mx];
struct node{
	int tag,v;
};
node ns[mx*4];
struct Q
{
	int opt,l,r;
	int x;
};
Q qst[mx*4];
inline int raed()
{
	int x=0,f=1;
	char c=getchar();
	while(c<'0' || c>'9')
	{
		if(c=='-') f=-1;
		c=getchar();
	}
	while(c>='0' && c<='9')
	{
		x=x*10+c-'0',c=getchar();
	}
	return x*f;
}
void update(int now)
{
	ns[now].v=min(ns[now].v,min(ns[now<<1].v,ns[now<<1|1].v)); 
}
void maketree(int now,int l,int r){
	now=++pos;
	if(l==r) ns[now].v=b[now];
	int mid=(l+r)/2;
	maketree(now<<1,l,mid),maketree(now<<1|1,mid+1,r);
	update(now);
}
void pushdown(int now,int l,int r)
{
	if(ns[now].tag==0) return ;
	int mid=(l+r)/2;
	ns[now<<1 ].v+=(mid-l+1)*ns[now].tag;
	ns[now<<1|1 ].v+=(r-mid)*ns[now].tag;
	ns[now<<1 ].tag+=ns[now].tag;
	ns[now<<1|1 ].tag+=ns[now].tag;
	ns[now].tag=0;
}
void edit(int now,int l,int r,int el,int er,int k)
{
	if(el<=l && er>=r)
	{
		ns[now].v+=(l-r+1)*k;
		ns[now].tag+=k; 
		return ;
	}
	int mid=(l+r)/2;
	if(el<=mid) edit(now<<1,l,mid,el,er,k);
	if(er>=mid) edit(now<<1|1,mid+1,r,el,er,k);
	update(now);
}
long long query_min(int now,int l,int r,int el,int er){
	if(el<=l && er>=r)
	{
		return ns[now].v;
	}
	int mid=(l+r)/2;
	long long ans=0x3f3f3f3f;
	if(el<=mid) ans=min(ans,query_min(now<<1,l,mid,el,er));
	if(er>=mid) ans=min(ans,query_min(now<<1|1,mid+1,r,el,er));
	return ans;
}
int main()
{
	t=read();
	while(t--)
	{
		int root=0;
		pos=0;
		n=read(),q=read();
		for(int i=1;i<=n;i++)
		{
			a[i]=raed();
		}
		for(int i=1;i<=q;i++)
		{
			qst[i].opt=raed(),qst[i].l=raed(),qst[i].r=read();
			if(qst[i].opt==1) qst[i].x=raed(); 
		}
		for(int i=1;i<=n;i++)
		{
			b[i]=read();
		}
		maketree(root,1,n);
		root=pos;
		for(int i=q;i>=1;i--)
		{
			if(qst[i].opt==1) edit(1,1,n,qst[i].l,qst[i].r,-qst[i].x);
			if(qst[i].opt==2) qst[i].x=query_min(1,1,n,qst[i].l,qst[i].r);
		}
		for(int i=1;i<=q;i++)
		{
			if(qst[i].opt==2) cout<<qst[i].x<<" "; 
		}
		cout<<"\n";
	} 
	return 0;
}
2022/11/20 23:22
加载中...