#include <bits/stdc++.h>
/*
    --> Author: Kazuki_Hoshino__8703 <--
    I love Nanasaki Ai ☆*: .。. o(≧▽≦)o .。.:*☆
*/
#define fi first
#define se second
#define pii pair<int, int>
#define ll long long
using namespace std;
const int mn = 1e6 + 5;
const ll inf = 1e18;
int n, a[mn], prefix[mn], id[mn];
ll dp[mn];
struct line{double x, y; };
double center(line x, line y){
    return (x.y - y.y) / (y.x - x.x);
}
vector <line> reina;
vector <double> pts; 
void add(line kumiko){
    while(reina.size() && reina.back().x == kumiko.x && reina.back().y > kumiko.y){
        reina.pop_back();
        pts.pop_back();
    }
    while(reina.size() >= 2 && center(reina.back(), kumiko) <= pts.back()){
        reina.pop_back();
        pts.pop_back();
    }
    if(reina.size()) pts.push_back(center(reina.back(), kumiko));
    else pts.push_back(-inf);
    reina.push_back(kumiko);
}
ll query(int val){
    int id = upper_bound(pts.begin(), pts.end(), (double)val) - pts.begin() - 1;
    return (ll)reina[id].x * (ll)val + (ll)reina[id].y;
}
void solve(){
    cin >> n;
    for(int i = 1; i <= n; i++){
        cin >> a[i];
        prefix[i] = max(prefix[i - 1], a[i]);
    
    }
    // dp[i] = dp[j] + prefix_max[i] * (n - j) = min(dp[j] - prefix_max[i] * j) + n * prefix_max[i]
    add({0, (double)prefix[0]});
    for(int i = 1; i <= n; i++){
        dp[i] = query(prefix[i]) + (ll)n * (ll)prefix[i];
        add({(double)-i, (double)dp[i]});
    }
    cout << dp[n];
}
signed main(){
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);
    cout.tie(NULL);
    int t = 1;
    // cin >> t;
    while(t--){
        solve();
    }
}
| # | Verdict | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict | Execution time | Memory | Grader output | 
|---|
| Fetching results... |