线段树求调
  • 板块灌水区
  • 楼主MarsNotFound
  • 当前回复0
  • 已保存回复0
  • 发布时间2024/6/14 14:03
  • 上次更新2024/6/14 14:07:53
查看原帖
线段树求调
973789
MarsNotFound楼主2024/6/14 14:03
#include<bits/stdc++.h>
#define maxn 400005
#define int long long
using namespace std;
int n,m,lazy[maxn<<2],a[maxn];
int t[maxn<<2],mi[maxn<<2];
void Pushup(int k)
{
	t[k]=t[k<<1]+t[k<<1|1];
	mi[k]=min(mi[k<<1],mi[k<<1|1]);
}
void Pushdown(int k,int l,int r)
{
	if(lazy[k])
	{
		lazy[k<<1]+=lazy[k];
		lazy[k<<1|1]+=lazy[k];
		mi[k<<1]+=lazy[k];
		mi[k<<1|1]+=lazy[k];
		int mid=(l+r)>>1;
		t[k<<1]+=(mid-l+1)*lazy[k<<1];
		t[k<<1|1]+=(r-mid)*lazy[k<<1|1];
		lazy[k]=0;
	}
}
void build(int l,int r,int k)
{
	if(l==r)
		t[k]=mi[k]=a[l];
	else
	{
		int mid=(l+r)>>1;
		build(l,mid,k<<1);
		build(mid+1,r,k<<1|1);
		Pushup(k);
	}
}
void update(int l,int r,int L,int R,int k,int v)
{
	if(L<=l && r<=R)
	{
		t[k]+=(r-l+1)*v;
		mi[k]+=v;
		lazy[k]+=v;
	}
	else
	{
		Pushdown(k,l,r);
		int mid=(l+r)>>1;
		if(L<=mid)
			update(l,mid,L,R,k<<1,v);
		if(mid<R)
			update(mid+1,r,L,R,k<<1|1,v);
		Pushup(k);
	}
}
int query(int l,int r,int L,int R,int k)
{
	if(L<=l && r<=R)
		return t[k];
	else
	{
		Pushdown(k,l,r);
		int res=0,mid=(l+r)>>1;
		if(L<=mid)
			res+=query(l,mid,L,R,k<<1);
		if(mid<R)
			res+=query(mid+1,r,L,R,k<<1|1);
		return res;
	}
}
int query2(int l,int r,int L,int R,int k)
{
	if(L<=l && r<=R)
		return mi[k];
	else
	{
		Pushdown(k,l,r);
		int res=0x3f3f3f3f,mid=(l+r)>>1;
		if(L<=mid)
			res=min(res,query2(l,mid,L,R,k<<1));
		if(mid<R)
			res=min(res,query2(mid+1,r,L,R,k<<1|1));
		return res;
	}
}
signed main()
{
	ios::sync_with_stdio(false);
	cin.tie(0),cout.tie(0);
	cin>>n>>m;
	for(int i=1;i<=n;i++)
		cin>>a[i];
	build(1,n,1);
	for(int i=1;i<=m;i++)
	{
		char aa;
		int b,c,d;
		cin>>aa>>b>>c;
		if(aa=='P')
		{
			cin>>d;
			update(1,n,b,c,1,d);
		}
		else if(aa=='S')
		{
			cout<<query(1,n,b,c,1)<<"\n";
		}
		else
		{
			cout<<query2(1,n,b,c,1)<<"\n";
		}
	}
	return 0;
} 

原题

一直只有第一个点过了,其他全wa

2024/6/14 14:03
加载中...