#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; } |
English