编译失败又不显示哪里出错是什么鬼
查看原帖
编译失败又不显示哪里出错是什么鬼
218250
chaotic楼主2022/4/8 16:59

一直编译失败又不显示哪里出错是什么鬼

本地又好好的

评测记录

附上代码:

#include<bits/stdc++.h>
using namespace std;
struct SegmentTree{
	int pre=0,suf=0,data=-1e9,sum=0,left=0,right=0;
	#define pre(x) c[x].pre
	#define suf(x) c[x].suf
	#define data(x) c[x].data
	#define sum(x) c[x].sum
	#define l(x) c[x].left
	#define r(x) c[x].right
}c[2000010];
int a[500010],tmpx,tmpy,n,m,flag;
void built(int l,int r,int rt)
{
	l(rt)=l;r(rt)=r;
	if(l==r)
	{
		pre(rt)=suf(rt)=data(rt)=sum(rt)=a[l];
		return;
	}
	int mid=(l+r)>>1;
	built(l,mid,rt<<1);
	built(mid+1,r,rt<<1|1);
	pre(rt)=max(pre(rt<<1),sum(rt<<1)+pre(rt<<1|1));
	suf(rt)=max(suf(rt<<1|1),sum(rt<<1|1)+suf(rt<<1));
	sum(rt)=sum(rt<<1)+sum(rt<<1|1);
	data(rt)=max(suf(rt<<1)+pre(rt<<1|1),max(data(rt<<1),data(rt<<1|1)));
}
SegmentTree query(int l,int r,int rt)
{
	if(l<=l(rt)&&r(rt)<=r)
		return c[rt];
	int mid=(l(rt)+r(rt))>>1;
	if(mid>=l&&mid<r)
	{
		SegmentTree ans,a,b;
		a=query(l,r,rt<<1);
		b=query(l,r,rt<<1|1);
		ans.data=max(ans.data,max(a.suf+b.pre,max(a.data,b.data)));
		ans.pre=max(a.pre,a.sum+b.pre);
		ans.suf=max(b.suf,b.sum+a.suf);
		ans.sum=a.sum+b.sum;
		return ans;
	}
	else if(mid>=l) return query(l,r,rt<<1);
	else return query(l,r,rt<<1|1);
}
void change(int w,int p,int rt)
{
	if(l(rt)==r(rt))
	{
		pre(rt)=suf(rt)=data(rt)=sum(rt)=a[w]=p;
		return;
	}
	int mid=(l(rt)+r(rt))>>1;
	if(mid>=w) change(w,p,rt<<1);
	else change(w,p,rt<<1|1);
	pre(rt)=max(pre(rt<<1),sum(rt<<1)+pre(rt<<1|1));
	suf(rt)=max(suf(rt<<1|1),sum(rt<<1|1)+suf(rt<<1));
	sum(rt)=sum(rt<<1)+sum(rt<<1|1);
	data(rt)=max(suf(rt<<1)+pre(rt<<1|1),max(data(rt<<1),data(rt<<1|1)));
}
int main()
{
	scanf("%d%d",&n,&m);
	for(int i=1;i<=n;i++)
		scanf("%d",&a[i]);
	built(1,n,1);
	for(int i=1;i<=m;i++)
	{
		scanf("%d%d%d",&flag,&tmpx,&tmpy);
		if(flag==2) change(tmpx,tmpy,1);
		else
		{
			if(tmpx>tmpy) swap(tmpx,tmpy);
			printf("%d\n",query(tmpx,tmpy,1).data);
		}
	}
	return 0;
}
2022/4/8 16:59
加载中...