Submission #1306857

#TimeUsernameProblemLanguageResultExecution timeMemory
1306857kirakosyanBigger segments (IZhO19_segments)C++20
100 / 100
71 ms15956 KiB
#include<iostream> #include<vector> #include<algorithm> #include<string> #include<cmath> #include<set> #include<map> #include<queue> #include<stack> #include<unordered_map> #include<unordered_set> using namespace std; using ll = long long; ll mod = 998244353; ll gcd(ll a, ll b) { if (b == 0)return a; else return gcd(b, a % b); } void solve() { ll n; cin >> n; vector<ll>v(n), pref(n); for (ll i = 0; i < n; i++) { cin >> v[i]; } pref[0] = v[0]; for (ll i = 1; i < n; i++) { pref[i] = pref[i - 1] + v[i]; } vector<ll> dp(n); vector<ll>mx(n + 1, -1); for (ll i = 0; i < n; i++) { if (i)mx[i] = max(mx[i], mx[i - 1]); if (mx[i] != -1) { dp[i] = dp[mx[i]] + 1; ll ind = lower_bound(pref.begin(), pref.end(), pref[i] + pref[i] - pref[mx[i]]) - pref.begin(); mx[ind] = max(mx[ind], i); } else { dp[i] = 1; ll ind = lower_bound(pref.begin(), pref.end(), pref[i] + pref[i]) - pref.begin(); mx[ind] = max(mx[ind], i); } } cout << dp[n-1] << endl; } signed main() { ios_base::sync_with_stdio(0); cin.tie(nullptr); cout.tie(nullptr); ll t = 1; //cin >> t; while (t--) { solve(); } }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...