제출 #1264503

#제출 시각아이디문제언어결과실행 시간메모리
1264503goulthenDischarging (NOI20_discharging)C++20
0 / 100
73 ms24780 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[i] - a[j]); } 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; q.push_back(1); rep(i,1,n) { while (q.size() > 1 && eval(q[0], i) >= eval(q[1], i)) q.pop_front(); dp[i] = eval(q.front(), i); while (q.size() > 1 && intersect(q.back(), q[q.size()-1]) <= intersect(q[q.size()-1], i)) q.pop_back(); q.push_back(i+1); } 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...