제출 #1131757

#제출 시각아이디문제언어결과실행 시간메모리
1131757AvianshDischarging (NOI20_discharging)C++20
0 / 100
67 ms15940 KiB
#include <bits/stdc++.h> using namespace std; double inter(array<long long,2>l1, array<long long,2>l2){ return (1.0*(l1[1]-l2[1]))/(1.0*(l2[0]-l2[0])); } signed main(){ ios::sync_with_stdio(0); cin.tie(0); int n; cin >> n; long long arr[n]; for(long long &i : arr){ cin >> i; } long long dp[n]; dp[0]=arr[0]*n; deque<array<long long,2>>q; q.push_back({n-1,dp[0]}); for(int i = 1;i<n;i++){ long long mx = arr[i]; dp[i]=2e18; int lo = 1; int hi = q.size(); while(lo<hi){ int mid = (lo+hi)/2; if(inter(q[mid],q[mid-1])>=arr[i]){ hi=mid; } else{ lo=mid+1; } } if(lo==1&&inter(q[0],q[1])>=arr[i]){ lo=0; } dp[i]=arr[i]*q[lo][0]+q[lo][1]; dp[i]=min(dp[i],mx*n); long long m = n-i-1; long long c = dp[i]; array<long long,2> l = {m,c}; while(q.size()>1&&inter(l,q[q.size()-2])<=inter(q[q.size()-1],q[q.size()-2])){ q.pop_back(); } q.push_back(l); } cout << dp[n-1]; return 0; }
#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...