#include <bits/stdc++.h> using namespace std; int n; int t[500001]; int f[500001]; int e[500001]; /* struct D{ int x; int y; int odl; D(int _x, int _y, int _odl) { x = _x; y = _y; odl = _odl; } }; bool cmp(D a, D b) { if(a.odl!=b.odl) return a.odl > b.odl; if(a.L!=b.L) return a.L < b.L; } vector<D> W; */ int main() { ios_base::sync_with_stdio(false); cin.tie(NULL); cin>>n; for(int i = 1;i<=n;i++) { cin>>t[i]; } //ELEKTROWNIE i FABRYKI for(int i = 1;i<=n;i++) { e[i]=e[i-1]; f[i]=f[i-1]; if(t[i]>0) { e[i]+=t[i]; }else{ f[i]+=t[i]; } } int L = 0; int X, Y; for(int i = 1; i<=n;i++) { if(t[i]!=0){ if(L==0) { X = i; L = i; }else{ Y = i; // W.push_back(new D(L, i, i-L+1)); } } } int wynik = Y-X+1; for( int i =X; i<=Y;i++) { //usuwamy droge (i,i+1); //sprawdzamy przedzial [L,i] & sprawdzamy przedzial [i+1,Y] if(e[i]-e[L-1] >= -(f[i]-f[L-1]) && e[Y]-e[i] >= -(f[Y]-f[i]) ) { wynik--; L = i+1; } } cout<<wynik<<"\n"; 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 | #include <bits/stdc++.h> using namespace std; int n; int t[500001]; int f[500001]; int e[500001]; /* struct D{ int x; int y; int odl; D(int _x, int _y, int _odl) { x = _x; y = _y; odl = _odl; } }; bool cmp(D a, D b) { if(a.odl!=b.odl) return a.odl > b.odl; if(a.L!=b.L) return a.L < b.L; } vector<D> W; */ int main() { ios_base::sync_with_stdio(false); cin.tie(NULL); cin>>n; for(int i = 1;i<=n;i++) { cin>>t[i]; } //ELEKTROWNIE i FABRYKI for(int i = 1;i<=n;i++) { e[i]=e[i-1]; f[i]=f[i-1]; if(t[i]>0) { e[i]+=t[i]; }else{ f[i]+=t[i]; } } int L = 0; int X, Y; for(int i = 1; i<=n;i++) { if(t[i]!=0){ if(L==0) { X = i; L = i; }else{ Y = i; // W.push_back(new D(L, i, i-L+1)); } } } int wynik = Y-X+1; for( int i =X; i<=Y;i++) { //usuwamy droge (i,i+1); //sprawdzamy przedzial [L,i] & sprawdzamy przedzial [i+1,Y] if(e[i]-e[L-1] >= -(f[i]-f[L-1]) && e[Y]-e[i] >= -(f[Y]-f[i]) ) { wynik--; L = i+1; } } cout<<wynik<<"\n"; return 0; } |