#include <bits/stdc++.h>
using namespace std;
#define ll long long
#define pll pair<ll, ll>
#define pii pair<int, int>
#define fs first
#define sc second
#define pb push_back
double ins(pll p1,pll p2){
    double x=p1.sc-p2.sc,y=p2.fs-p1.fs;
    return x/y;
}
void solve() {
    int n;
    cin>>n;
    ll a[n+1];
    for(int i=1;i<=n;i++)cin>>a[i];
    vector<pll> ch;
    ll dp[n+1];
    dp[0]=0;
    int idx=0;
    for(int i=1;i<=n;i++){
        pll p={n-i+1,dp[i-1]};
        while(ch.size()>1&&ins(ch[ch.size()-2],ch.back())>ins(ch.back(),p))ch.pop_back();
        ch.push_back(p);
        idx=min(idx,(int)ch.size()-1);
        while(idx+1<ch.size()&&ins(ch[idx],ch[idx+1])<a[i])idx++;
        dp[i]=ch[idx].fs*a[i]+ch[idx].sc;
    }
    cout<<dp[n]<<'\n';
}
int main() {
    #ifdef FPO
        freopen("in","r",stdin);
        freopen("out","w",stdout);
    #endif
    ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0);
    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... |