제출 #1134340

#제출 시각아이디문제언어결과실행 시간메모리
1134340AgageldiBigger segments (IZhO19_segments)C++17
13 / 100
1 ms328 KiB
#include <bits/stdc++.h> using namespace std; #define ll long long #define N 600005 #define pb push_back #define ff first #define ss second #define sz(s) (int)s.size() ll n, t, a[N], dp[N], p[N], sum[N]; vector <pair<int,int>> v; priority_queue <pair<ll,int>> ans; int main (){ ios::sync_with_stdio(0);cin.tie(0); 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 l = 0,r = sz(v) - 1,jog = -1; while(l<=r) { int md = (l+r)/2; if(v[md].ff > p[i]) { r = md-1; } else { jog = md; l = md + 1; } } if(!(~jog)) { dp[i] = 1; sum[i] = p[i]; } else { dp[i] = dp[v[jog].ss] + 1; sum[i] = p[i] - p[v[jog].ss]; } } else { dp[i] = 1; sum[i] = a[i]; } while(!v.empty() && v.back().ff >= p[i] + sum[i]){ v.pop_back(); } v.pb({p[i] + sum[i], i}); } cout << dp[n] << '\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...