#include<bits/stdc++.h> using namespace std; long long tab[500006], sum=0, wyn=0; int drog[500005]; int main() { int n; scanf("%d", &n); for(int i=1; i<=n; i++) { drog[i]=1; scanf("%lld", &tab[i]); sum+=tab[i]; } if(sum<0) { if(sum<0) printf("-1"); return 0; } for(int i=1;i<=n;i++) { long long mini=100000000000000000, poz1=1, poz2=1, s=0, y=(-1)*tab[i]; int kon=1; int l=0; if(y>0) { for(int j=1; j<=i;j++) { if(s>=y) { } else while(kon<=n) { l+=drog[kon]; if(tab[kon]>0) { s+=tab[kon]; } if(s>=y) break; kon++; } l-=drog[j]; if(tab[j]>0) s-=tab[j]; if(l<mini) { mini=l; poz1=j; poz2=kon; } } printf("%d %d\n", poz1, poz2); for(int k=poz1; k<=poz2-1; k++) { drog[k]=0; if(tab[k]>0) if(tab[k]>y) { tab[k]-=y; y=0; } else { tab[k]=0; y-=tab[k]; } } } } int odp=0; for(int i=1;i<n; i++) { if(drog[i]==0) odp++; } printf("%d", odp); return 0; }
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 | #include<bits/stdc++.h> using namespace std; long long tab[500006], sum=0, wyn=0; int drog[500005]; int main() { int n; scanf("%d", &n); for(int i=1; i<=n; i++) { drog[i]=1; scanf("%lld", &tab[i]); sum+=tab[i]; } if(sum<0) { if(sum<0) printf("-1"); return 0; } for(int i=1;i<=n;i++) { long long mini=100000000000000000, poz1=1, poz2=1, s=0, y=(-1)*tab[i]; int kon=1; int l=0; if(y>0) { for(int j=1; j<=i;j++) { if(s>=y) { } else while(kon<=n) { l+=drog[kon]; if(tab[kon]>0) { s+=tab[kon]; } if(s>=y) break; kon++; } l-=drog[j]; if(tab[j]>0) s-=tab[j]; if(l<mini) { mini=l; poz1=j; poz2=kon; } } printf("%d %d\n", poz1, poz2); for(int k=poz1; k<=poz2-1; k++) { drog[k]=0; if(tab[k]>0) if(tab[k]>y) { tab[k]-=y; y=0; } else { tab[k]=0; y-=tab[k]; } } } } int odp=0; for(int i=1;i<n; i++) { if(drog[i]==0) odp++; } printf("%d", odp); return 0; } |