#include <cstdio> #include <set> long long t[500000]; int main () { int n; scanf ("%i", &n); for (int i=0; i<n; i++) { int a; scanf ("%i", &a); t[i] = i? a + t[i-1]: a; } if (t[n-1] < 0) return 0 * puts ("-1"); std::multiset <long long> m; for (int i=0; i<n-1; i++) if (0 <= t[i] && t[i] <= t[n-1]) { auto j = m.emplace (t[i]); if (++j != m.end ()) m.erase (j); } printf ("%lu\n", n-1 - m.size ()); 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 | #include <cstdio> #include <set> long long t[500000]; int main () { int n; scanf ("%i", &n); for (int i=0; i<n; i++) { int a; scanf ("%i", &a); t[i] = i? a + t[i-1]: a; } if (t[n-1] < 0) return 0 * puts ("-1"); std::multiset <long long> m; for (int i=0; i<n-1; i++) if (0 <= t[i] && t[i] <= t[n-1]) { auto j = m.emplace (t[i]); if (++j != m.end ()) m.erase (j); } printf ("%lu\n", n-1 - m.size ()); return 0; } |