#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,lg=0;
for(int i=1;i<=n;i++){
if(!lg||a[i]>a[lg]){
for(int j=lg+1;j<=i;j++){
pll p={n-j+1,dp[j-1]};
while(ch.size()>1&&ins(ch[ch.size()-2],ch.back())>ins(ch.back(),p))ch.pop_back();
ch.push_back(p);
}
lg=i;
}
idx=min(idx,(int)ch.size()-1);
while(idx+1<ch.size()&&ins(ch[idx],ch[idx+1])<a[lg])idx++;
dp[i]=ch[idx].fs*a[lg]+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... |