记录编号 239280 评测结果 AAAAAAAAAA
题目名称 单子序列最大和 最终得分 100
用户昵称 Gravatarliu_runda 是否通过 通过
代码语言 C++ 运行时间 0.039 s
提交时间 2016-03-20 09:45:16 内存使用 7.92 MiB
显示代码纯文本
#include<cstdio>
int read(){
	bool minus=false;
	char ch;int x;
	while(ch=getchar(),(ch<'0'||ch>'9')&&ch!='-');
	if(ch=='-'){
		minus=true;
		ch=getchar();
	}
	x=ch-'0';
	while(ch=getchar(),ch<='9'&&ch>='0')x=x*10+ch-48;
	return minus?-x:x;
}
struct queue{
	int q[1000005],index[1000005];
	int head,tail;
	void add(int x,int i){
		while(head!=tail&&q[tail-1]>x)tail--;
		index[tail]=i;
		q[tail++]=x;
	}
	int min(){
		return q[head];
	}
}q1;
int main(){
	freopen("subq.in","r",stdin);
	freopen("subq.out","w",stdout);
	int n=read();
	int ans=-(1<<20),sum=0,l=-1,r=-1,tmp,now;
	q1.add(0,0);
	for(int i=1;i<=n;++i){
		tmp=read();
		sum+=tmp;
		now=sum-q1.min();
		if(now>ans){
			l=q1.index[q1.head];
			r=i;
			ans=now;
		}else if(now==ans){
			if(q1.index[q1.head]<l){
				l=q1.index[q1.head];
				r=i;
			}
		}
		q1.add(sum,i);
	}
	printf("%d\n%d\n%d\n",l+1,r,ans);
	fclose(stdin);fclose(stdout);
	return 0;
}