#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
struct ps{
int64_t p;
int s;
bool operator <(const struct ps& par) {
if(s==par.s)
return p>par.p;
return s<par.s;
}
};
int main(int argc, char* argv[]) {
ios_base::sync_with_stdio (false);
int n, i, p, s, mi, j, ign;
vector<ps> m(500001);
mi = 1;
m[0].p = 0;
m[0].s = 0;
s = 0;
cin >> n;
for (i = 0; i < n; ++i) {
cin >> p;
s++;
if (p == 0)
continue;
ign = -1;
for (j = 0; j < mi; ++j) {
if (ign==-1 && m[j].p >= 0) {
ign=m[j].s;
}
m[j].p += p;
m[j].s += s;
}
if (ign >= 0) {
m[mi++] = ps{p, ign};
sort(m.begin(), m.begin()+mi);
}
s = 0;
}
for (j = 0; j < mi; ++j) {
if (m[j].p >= 0) {
cout << m[j].s << "\n";
return 0;
}
}
cout << -1 << "\n";
}
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 | #include <iostream> #include <vector> #include <algorithm> using namespace std; struct ps{ int64_t p; int s; bool operator <(const struct ps& par) { if(s==par.s) return p>par.p; return s<par.s; } }; int main(int argc, char* argv[]) { ios_base::sync_with_stdio (false); int n, i, p, s, mi, j, ign; vector<ps> m(500001); mi = 1; m[0].p = 0; m[0].s = 0; s = 0; cin >> n; for (i = 0; i < n; ++i) { cin >> p; s++; if (p == 0) continue; ign = -1; for (j = 0; j < mi; ++j) { if (ign==-1 && m[j].p >= 0) { ign=m[j].s; } m[j].p += p; m[j].s += s; } if (ign >= 0) { m[mi++] = ps{p, ign}; sort(m.begin(), m.begin()+mi); } s = 0; } for (j = 0; j < mi; ++j) { if (m[j].p >= 0) { cout << m[j].s << "\n"; return 0; } } cout << -1 << "\n"; } |
English