51 nod 1065 最小正子段和 排序大法好

来源:互联网 发布:jquery ui.js cdn 编辑:程序博客网 时间:2024/05/27 06:51

思路:对前缀和排序,求相邻前缀和差的最小值和每个前缀和的最小值。

#include <bits/stdc++.h>using namespace std;typedef long long LL;const int inf = 0x3f3f3f3f;const int MAXN = 50005;struct node{    LL sum;    int k;    bool operator < (const node &a)const{        return a.sum>sum;    }}a[MAXN];int main(){    int n;    scanf("%d", &n);    LL x;    a[0].sum=0,a[0].k=0;    for(int i=1;i<=n;++i)    {        scanf("%lld", &x);        a[i].sum=a[i-1].sum+x;        a[i].k=i;    }    sort(a+1, a+n+1);    LL ans=inf;    for(int i=1;i<=n;++i)    {        if(a[i].sum>0)            ans=a[i].sum<ans?a[i].sum:ans;        if(a[i].k>a[i-1].k&&a[i].sum-a[i-1].sum>0)            ans=min(a[i].sum-a[i-1].sum, ans);    }    printf("%lld\n", ans);    return 0;}
原创粉丝点击