#include <algorithm>
#include <climits>
#include <iostream>
#include <vector>
using namespace std;
long long s[500001];
int main() {
ios_base::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
size_t n;
cin >> n;
for(size_t i = 1; i <= n; ++i) {
long long a;
cin >> a;
s[i] = s[i - 1] + a;
}
if(s[n] < 0) {
cout << -1 << '\n';
return 0;
}
vector<pair<long long, size_t>> punkty; // suma, max droga
for(size_t i = 0; i <= n; ++i)
if(0 <= s[i] && s[i] <= s[n])
punkty.push_back({s[i], (size_t) -1});
size_t len = punkty.size();
for(size_t i = len - 1; i != (size_t) -1; --i) {
size_t m = 0;
long long w = LLONG_MAX;
for(size_t j = i + 1; j < len; ++j)
if(punkty[j].first >= punkty[i].first && punkty[j].first < w) {
w = punkty[j].first;
m = max(m, punkty[j].second + 1);
}
punkty[i].second = m;
}
cout << n - punkty[0].second << '\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 | #include <algorithm> #include <climits> #include <iostream> #include <vector> using namespace std; long long s[500001]; int main() { ios_base::sync_with_stdio(false); cin.tie(0); cout.tie(0); size_t n; cin >> n; for(size_t i = 1; i <= n; ++i) { long long a; cin >> a; s[i] = s[i - 1] + a; } if(s[n] < 0) { cout << -1 << '\n'; return 0; } vector<pair<long long, size_t>> punkty; // suma, max droga for(size_t i = 0; i <= n; ++i) if(0 <= s[i] && s[i] <= s[n]) punkty.push_back({s[i], (size_t) -1}); size_t len = punkty.size(); for(size_t i = len - 1; i != (size_t) -1; --i) { size_t m = 0; long long w = LLONG_MAX; for(size_t j = i + 1; j < len; ++j) if(punkty[j].first >= punkty[i].first && punkty[j].first < w) { w = punkty[j].first; m = max(m, punkty[j].second + 1); } punkty[i].second = m; } cout << n - punkty[0].second << '\n'; return 0; } |
English