제출 #1131761

#제출 시각아이디문제언어결과실행 시간메모리
1131761AvianshDischarging (NOI20_discharging)C++20
0 / 100
276 ms15912 KiB
#include <bits/stdc++.h> using namespace std; long long inter(array<long long,2>l1, array<long long,2>l2){ return ((l1[1]-l2[1]))/((l2[0]-l1[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 = 0; int hi = q.size()-1; while(lo<hi){ int mid = (lo+hi)/2; if(inter(q[mid],q[mid+1])>=arr[i]){ lo=mid+1; } else{ hi=mid; } } 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...