제출 #1152766

#제출 시각아이디문제언어결과실행 시간메모리
1152766AndrijaMDischarging (NOI20_discharging)C++20
100 / 100
68 ms16104 KiB
#include<bits/stdc++.h> using namespace std; #define int long long #define endl '\n' const int maxn=5e3+10; double ins(pair<int,int> p1,pair<int,int> p2) { return (p1.second-p2.second)*1.0/(p2.first-p1.first); } signed main() { ios::sync_with_stdio(0); int n; cin>>n; vector<int>a(n+1); vector<int>dp(n+1); for(int i=1;i<=n;i++) { cin>>a[i]; } vector<pair<int,int>>convexH; dp[0]=0; int idx=0; int last=0; for(int i=1;i<=n;i++) { if(!last || a[i]>a[last]) { for(int j=last+1;j<=i;j++) { pair<int,int>p={n-j+1,dp[j-1]}; while(convexH.size()>1 && ins(convexH[convexH.size()-2],convexH.back())>ins(convexH.back(),p)) { convexH.pop_back(); } convexH.push_back(p); } last=i; } idx=min(idx,(int)convexH.size()-1); while(idx+1<convexH.size() && ins(convexH[idx],convexH[idx+1])<a[last]) { idx++; } dp[i]=convexH[idx].first*a[last]+convexH[idx].second; } cout << dp[n] << '\n'; }
#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...