Submission #1264505

#TimeUsernameProblemLanguageResultExecution timeMemory
1264505goulthenDischarging (NOI20_discharging)C++20
0 / 100
66 ms15944 KiB
#include <bits/stdc++.h> using namespace std; #define int long long #define rep(i,a,b) for(int i=a;i<=b;++i) #define per(i,a,b) for(int i=a;i>=b;--i) #define pb push_back const int MAXN = 1e6 + 10; const int INF = 1e18+10; int a[MAXN], dp[MAXN]; int eval(int i, int x) { return dp[i-1] + a[i]*x; } double intersect(int i, int j) { return (double)(dp[i-1] - dp[j-1]) / (a[j] - a[i]); } int32_t main(){ ios::sync_with_stdio(0);cin.tie(0); int n;cin >> n; rep(i,1,n) cin >> a[i]; reverse(a+1,a+n+1); deque<int> q; rep(i,1,n) { while (q.size() > 1 && intersect(q.back(), q[q.size()-2]) >= intersect(q[q.size()-2], i)) q.pop_back(); q.push_back(i); while (q.size() > 1 && intersect(q[0], q[1]) <= i) q.pop_front(); dp[i] = eval(q.front(), i); } cout << dp[n] << '\n'; return 0; }
#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...