Submission #1133727

#TimeUsernameProblemLanguageResultExecution timeMemory
1133727Halym2007Bigger segments (IZhO19_segments)C++17
100 / 100
93 ms22152 KiB
#include <bits/stdc++.h> using namespace std; #define ll long long #define sz size() #define ff first #define ss second #define pb push_back #define pii pair <ll, int> #define dur exit(0) #define dur1 return(0) const int N = 5e5 + 5; ll a[N], p[N], val[N]; int dp[N]; vector <pii> v; int main () { // freopen ("input.txt", "r", stdin); ios::sync_with_stdio(0);cin.tie(0);cout.tie(0); int n; cin >> n; for (int i = 1; i <= n; ++i) { cin >> a[i]; p[i] = p[i - 1] + a[i]; } for (int i = 1; i <= n; ++i) { if (!v.empty()) { int jog = -1, l = 0, r = (int)v.sz - 1; while (l <= r) { int mid = (l + r) / 2; if (v[mid].ff > p[i]) { r = mid - 1; } else { l = mid + 1; jog = mid; } } if (~jog) { dp[i] = dp[v[jog].ss] + 1; val[i] = p[i] - p[v[jog].ss]; } else { dp[i] = 1; val[i] = p[i]; } } else { dp[i] = 1; val[i] = a[i]; } while (!v.empty() and v.back().ff >= p[i] + val[i]) { v.pop_back(); } v.pb ({p[i] + val[i], i}); } cout << dp[n]; }
#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...