标签:
第1行:整数序列的长度N(2 <= N <= 50000) 第2 - N+1行:N个整数
输出最小正子段和。
8 4 -1 5 -2 -1 2 6 -2
1
代码如下:
#include <iostream> #include <algorithm> #include <cstdio> #include <cstring> using namespace std; typedef long long LL; struct node { LL m; int pos; } A[50005]; bool cmp(const node x,const node y) { return x.m<y.m; } int main() { int N; while(scanf("%d",&N)!=EOF) { A[0].m=0; A[0].pos=0; for(int i=1; i<=N; i++) { LL x; scanf("%lld",&x); A[i].m=A[i-1].m+x; A[i].pos=i; } sort(A,A+N+1,cmp); LL t=999999999999; for(int i=1; i<=N; i++) { for(int j=i-1; j>=0; j--) { LL tmp=A[i].m-A[i-1].m; if(A[i].pos<A[i-1].pos) tmp=0-tmp; if(tmp>0) { t=min(t,tmp); break; } } } cout<<t<<endl; } return 0; }
标签:
原文地址:http://www.cnblogs.com/chen9510/p/5635850.html