Submission #645784

#TimeUsernameProblemLanguageResultExecution timeMemory
645784kith14Safety (NOI18_safety)C++17
24 / 100
2061 ms724 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 = 5e3+5, MOD = 1e9+7; ll tc = 1, n, m, ar[N], br[N], dp[2][N]; string s, s1, s2, ye = "YA", no = "TIDAK"; ll tree[2][N*4]; void build(ll l, ll r, ll idx, ll bt){ if (l == r){ tree[bt][idx] = dp[bt][l]; return; } ll md = (l+r)/2; build(l,md,idx*2,bt); build(md+1,r,idx*2+1,bt); tree[bt][idx] = min(tree[bt][idx*2],tree[bt][idx*2+1]); } ll que(ll l, ll r, ll idx, ll x, ll y, ll bt){ if ( l > r || l > y || r < x) return 1e18; if (x <= l && r <= y) return tree[bt][idx]; ll md = (l+r)/2; return min(que(l,md,idx*2,x,y,bt),que(md+1,r,idx*2+1,x,y,bt)); } void input(){ cin >> n >> m; repp(i,1,n) cin >> ar[i]; } void solve(){ ll lm = 5000; repp(i,0,lm){ dp[n%2][i] = abs(i-ar[n]); } build(0,lm,1,n%2); repm(i,n-1,1){ ll cur = (i)%2, pre = (i+1)%2; repp(j,0,lm){ ll btl = max(0LL,j-m), btr = min(j+m,lm); // repp(kk,btl,btr){ // dp[cur][j] = min(dp[cur][j],dp[pre][kk]+abs(ar[i]-j)); // } dp[cur][j] = que(0,lm,1,btl,btr,pre)+abs(ar[i]-j); } build(0,lm,1,cur); } 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...