Submission #645799

#TimeUsernameProblemLanguageResultExecution timeMemory
645799kith14Safety (NOI18_safety)C++17
40 / 100
216 ms5252 KiB
#include <bits/stdc++.h> using namespace std; #define ll long long #define db double #define pairll pair<ll,ll> #define lpairll pair<ll,pairll> #define repp(i,a,b) for (ll i = a; i <= b; i++) #define repz(i,a,b) for (ll i = a; i < b; i++) #define repm(i,a,b) for (ll i = a; i >= b; i--) #define fr first #define sc second #define mp make_pair #define pb push_back const ll N = 2e5+5, MOD = 1e9+7; ll tc = 1, n, m, ar[N], br[N], dp[2][N]; string s, s1, s2, ye = "YA", no = "TIDAK"; void input(){ cin >> n >> m; repp(i,1,n) cin >> ar[i]; } void subm0(){ sort(ar+1,ar+n+1); repp(i,1,n){ br[i] = br[i-1]+ar[i]; } ll ans = 1e18; repp(i,1,n){ ll tt; tt = ar[i]*i-br[i]; tt += br[n]-br[i]-(n-i)*ar[i]; //cout << i << " " << tt << endl; ans = min(ans,tt); } cout << ans << endl; exit(0); } void solve(){ if (m == 0){ subm0(); } ll lm = 5000; repp(i,0,lm){ dp[n%2][i] = abs(i-ar[n]); } m = min(lm,m); repm(i,n-1,1){ ll cur = (i)%2, pre = (i+1)%2; deque<ll> dq; repp(j,0,m){ while(dq.size() && dp[pre][j] < dp[pre][dq.back()]){ dq.pop_back(); } dq.push_back(j); } repp(j,0,lm){ ll btl = max(0LL,j-m), btr = j+m; while(dq.size() && dq.front() < btl) dq.pop_front(); if (btr <= lm){ while(dq.size() && dp[pre][btr] < dp[pre][dq.back()]){ dq.pop_back(); } dq.push_back(btr); } dp[cur][j] = dp[pre][dq.front()]+abs(ar[i]-j); } } ll ans = 1e18; repp(i,0,lm){ ans = min(ans,dp[1][i]); } cout << ans << endl; } int main(){ ios_base::sync_with_stdio(0); cin.tie(NULL); cout.tie(NULL); //cin >> tc; while(tc--){ input(); solve(); } }
#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...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...