Submission #320662

#TimeUsernameProblemLanguageResultExecution timeMemory
320662Sparky_09Discharging (NOI20_discharging)C++17
100 / 100
155 ms16484 KiB
#include<bits/stdc++.h> using namespace std; #define ll long long #define pll pair<ll,ll> ll slope(pll x, pll y){ if(x.first<y.first){ swap(x,y); } return(y.second-x.second)/(x.first-y.first); } int main(){ ios_base::sync_with_stdio(false); //freopen("input.txt", "r", stdin); int n; cin >> n; vector<ll> v(n+5), dp(n+5); vector<pair<ll,ll>> q; for(int i = 1; i <= n; i++){ cin >> v[i]; v[i] = max(v[i], v[i-1]); } q.emplace_back(n,0); int idx=0; for(int i = 1; i <= n; i++){ dp[i] = (ll)1e9; if(v[i]==v[i+1]) continue; while(idx+1 < (int)q.size() and slope(q[idx],q[idx+1]) < v[i]){ idx++; } dp[i] = q[idx].second + q[idx].first * v[i]; while(q.size() > 1 and slope(q[q.size()-2], q[q.size()-1]) >= slope(q[q.size()-1], make_pair((ll)n-i, (ll)dp[i]))){ q.pop_back(); } q.emplace_back(n - i, dp[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...
#Verdict Execution timeMemoryGrader output
Fetching results...