记录编号 |
239679 |
评测结果 |
AAAAAAAAAA |
题目名称 |
单子序列最大和 |
最终得分 |
100 |
用户昵称 |
SPA |
是否通过 |
通过 |
代码语言 |
C++ |
运行时间 |
0.041 s |
提交时间 |
2016-03-20 15:11:02 |
内存使用 |
4.13 MiB |
显示代码纯文本
#include<bits/stdc++.h>
using namespace std;
inline int QR(){
char ch;
bool minus=0;
while(!isdigit(ch=getchar())) if(ch=='-') minus=1;
int x=ch-48;
while(isdigit(ch=getchar())) x=x*10+ch-48;
if(minus) return -x;
return x;
}
inline void QW(long long num){
if(num<0) num=-num,putchar('-');
int cnt=0;
string str;
while(str[++cnt]=num%10+'0',num/=10,num);
while(putchar(str[cnt]),--cnt,cnt);
putchar('\n');//数字之后的输出
}
const int ma=1e6+10;
deque <int> q;
int sum[ma]={0};
int main(){
#define OJ
#ifdef OJ
freopen("subq.in","r",stdin);
freopen("subq.out","w",stdout);
#endif
int n=QR(),l,r;
int ans=-0x7fffffff;
for(int i=1;i<=n;i++) sum[i]+=sum[i-1]+QR();//前缀和
for(int i=1;i<=n;i++){
while(!q.empty() && sum[i-1]<=sum[q.back()]) q.pop_back();
q.push_back(i-1);
int f=q.front();
if(ans<sum[i]-sum[f]) ans=sum[i]-sum[f],l=f+1,r=i;
}
QW(l),QW(r),QW(ans);
return 0;
}