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