求助GSS5
查看原帖
求助GSS5
100091
GaryH楼主2021/1/6 20:38

始终找不到自己哪里错了,麻烦各位巨佬能指点一下吗

#include<iostream>
#include<cstdio>
#define max(a,b) (a>b?a:b)
#define min(a,b) (a<b?a:b)
using namespace std;
const int maxn=10000+10;
int T,n,q;
int a[maxn];
int x1,x2,Y1,y2;
struct Tree{
	int l,r;
	int val,sum;
	int lmx,rmx;
}t[maxn<<3];
inline int read(void){
	int x=0,f=1;char ch=getchar();
	while(ch<'0'||ch>'9'){
		if(ch=='-')f=-1;
		ch=getchar();
	}
	while(ch>='0'&&ch<='9'){
		x=(x<<1)+(x<<3)+(ch^48);
		ch=getchar();
	}
	return x*f;
}
inline void push_up(int p){
	int ls=p<<1,rs=p<<1|1;
	t[p].sum=t[ls].sum+t[rs].sum;
	t[p].lmx=max(t[ls].lmx,t[ls].sum+t[rs].lmx);
	t[p].rmx=max(t[rs].rmx,t[rs].sum+t[ls].rmx);
	t[p].val=max(t[rs].lmx+t[ls].rmx,max(t[ls].val,t[rs].val));
}
inline void build(int p,int L,int R){
	t[p].sum=0;
	t[p].l=L,t[p].r=R;
	t[p].lmx=t[p].rmx=t[p].val=0;
	if(L==R){
		t[p].sum=t[p].lmx=t[p].rmx=t[p].val=a[L];
		return;
	}
	int mid=(L+R)>>1;
	build(p<<1,L,mid),build(p<<1|1,mid+1,R);
	push_up(p);
}
inline Tree query(int p,int L,int R){
	if(L>R){
		return (Tree){0,0,0,0,0,0};
	}
	int ls=p<<1,rs=p<<1|1;
	if(L<=t[p].l&&R>=t[p].r){
		return t[p];
	}
	int mid=(t[p].l+t[p].r)>>1;
	if(L>mid)return query(rs,L,R);
	if(R<=mid)return query(ls,L,R);
	Tree ans,lsn,rsn;
	lsn=query(ls,L,mid),rsn=query(rs,mid+1,R);
	ans.sum=lsn.sum+rsn.sum;
	ans.lmx=max(lsn.lmx,lsn.sum+rsn.lmx);
	ans.rmx=max(rsn.rmx,rsn.sum+lsn.rmx);
	ans.val=max(lsn.rmx+rsn.lmx,max(lsn.val,rsn.val));
	return ans;
}
int main(){
	T=read();
	while(T--){
		n=read();
		for(int i=1;i<=n;i++){
			a[i]=read();
		}
		build(1,1,n);
		q=read();
		for(int i=1;i<=q;i++){
			int ans=0;
			x1=read(),Y1=read();
			x2=read(),y2=read();
			if(Y1<x2){
				Tree mid,lsn,rsn;
				mid=query(1,Y1+1,x2-1);
				lsn=query(1,x1,Y1),rsn=query(1,x2,y2);
				ans=lsn.rmx+mid.sum+rsn.lmx;
			}else{
				ans=query(1,x2,Y1).val;
				if(x1<x2)ans=max(ans,query(1,x1,Y1).rmx+query(1,Y1,y2).lmx-a[Y1]);
				if(y2>Y1)ans=max(ans,query(1,x1,x2).rmx+query(1,x2,y2).lmx-a[x2]);
			}
			printf("%d\n",ans);
		}
	}
	return 0;
}
2021/1/6 20:38
加载中...