#2WA求调
  • 板块CF1691D Max GEQ Sum
  • 楼主岂非
  • 当前回复1
  • 已保存回复1
  • 发布时间2022/11/21 10:59
  • 上次更新2023/10/27 02:06:46
查看原帖
#2WA求调
359845
岂非楼主2022/11/21 10:59
#include <cstdio>
#include <cstdlib>
#include <algorithm>
#define ll long long
using namespace std;
ll t,n,a[300010],top,lm[300010],rm[300010],fl;
pair<ll,ll> sta[300010];
struct Node{
	int l,r,mid;
	ll maxn,minn;
	Node *lson,*rson;
}*head;
Node *build(int l,int r){
	Node *p=new(Node);
	p->l=l;p->r=r;p->mid=(l+r)>>1;
	p->maxn=-0x7fffffff;p->minn=0x7fffffff;
	p->lson=p->rson=NULL;
	if(l!=r){
		p->lson=build(l,p->mid);
		p->rson=build(p->mid+1,r);
	}
	return p; 
}
void chg(int pos,ll w,Node *p){
	if(p->l==p->r){
		p->maxn=p->minn=w;return;
	}
	if(pos<=p->mid){
		chg(pos,w,p->lson);
	}
	else{
		chg(pos,w,p->rson);
	}
	p->maxn=max(p->lson->maxn,p->rson->maxn);
	p->minn=min(p->lson->minn,p->rson->minn);
}
ll query(int l,int r,Node *p){
	if(l==0){
		if(r==0) return 0;
		return max((ll)0,query(1,r,p));
	}
	if(l<=p->l&&p->r<=r){
		return p->maxn;
	}
	ll res=-0x7fffffff;
	if(l<=p->mid){
		res=max(res,query(l,r,p->lson));
	}
	if(r>p->mid){
		res=max(res,query(l,r,p->rson));
	}
	return res;
}
ll query1(int l,int r,Node *p){
	if(l==0){
		if(r==0) return 0;
		return min((ll)0,query1(1,r,p));
	}
	if(l<=p->l&&p->r<=r){
		return p->minn;
	}
	ll res=0x7fffffff;
	if(l<=p->mid){
		res=min(res,query1(l,r,p->lson));
	}
	if(r>p->mid){
		res=min(res,query1(l,r,p->rson));
	}
	return res;
}
signed main(){
	scanf("%lld",&t);
	head=build(1,300000);
	while(t--){
		fl=0;
		scanf("%lld",&n);
		top=0;
		sta[0].second=0;
		for(int i=1;i<=n;i++){
			scanf("%lld",&a[i]);
			while(top>0&&sta[top].first<=a[i]) top--;
			lm[i]=sta[top].second;
			top++;
			sta[top].first=a[i];
			sta[top].second=i;
		}
		top=0;
		sta[0].second=n+1;
		for(int i=n;i>0;i--){
			while(top>0&&sta[top].first<=a[i]) top--;
			rm[i]=sta[top].second;
			top++;
			sta[top].first=a[i];
			sta[top].second=i;
		}
		for(int i=1;i<=n;i++){
			a[i]+=a[i-1];
			chg(i,a[i],head);
		}
		for(int i=1;i<=n;i++){
			if(query(i,rm[i]-1,head)-query1(lm[i],i-1,head)>a[i]-a[i-1]){
				fl=1;break;
			}
		}
		if(fl){
			puts("NO");
		}
		else{
			puts("YES");
		}
	}
	return 0;
}
2022/11/21 10:59
加载中...