Submission #524005

#TimeUsernameProblemLanguageResultExecution timeMemory
524005DanerZeinDischarging (NOI20_discharging)C++14
38 / 100
372 ms14676 KiB
#include <bits/stdc++.h> using namespace std; typedef long long ll; const int MAX_N=1e6+10; struct line{ ll m,b; line(ll mm,ll bb){ m=mm; b=bb; } ll eval(ll x){ return m*x+b; } long double intersect(line l){ return (long double)(b-l.b)/(l.m-m); } }; ll val[MAX_N]; int main(){ int n; cin>>n; for(int i=1;i<=n;i++){ cin>>val[i]; } deque<line> dq; dq.push_front({0,0}); ll ans=0; for(int i=1;i<=n;i++){ int t=dq.size(); line nl={-i,ans}; while(t>=2 && nl.intersect(dq[t-2])<=dq[t-1].intersect(dq[t-2])){ dq.pop_back(); t--; } dq.push_back(nl); while(dq.size()>=2 && dq[0].eval(val[i])>=dq[1].eval(val[i])) dq.pop_front(); ans=dq.front().eval(val[i])+val[i]*(n+1); } cout<<ans<<endl; }
#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...