Submission #1311460

#TimeUsernameProblemLanguageResultExecution timeMemory
1311460samarthkulkarniSafety (NOI18_safety)C++20
24 / 100
2095 ms2496 KiB
#include <bits/stdc++.h>
using namespace std;

using ll = long long;
#define vi vector<long long>
#define all(x) x.begin(), x.end()
#define endl "\n"

void solution();
int main(){
    ios::sync_with_stdio(false);
    cin.tie(nullptr);
    solution();
    return 0;
}


struct SegTree {
	vi a, tree;
	ll n;
	SegTree (const vi &temp) {
		a = temp;
		n = a.size();
		tree.resize(4*n);
	}

	void build(int id, int l, int r) {
		if (l == r) {
			tree[id] = a[l];
			return;
		}
		int mid = (l + r)/2;
		build(2*id, l, mid);
		build(2*id+1, mid+1, r);
		tree[id] = min(tree[2*id], tree[2*id+1]);
	}

	ll query(int id, int l, int r, int L, int R) {
		if (L > r || l > R) return 1e18;
		if (L <= l && R >= r) return tree[id];

		int mid = (l + r)/2;
		return min(query(2*id, l, mid, L, R), query(2*id+1, mid+1, r, L, R));
	}

	void build(){build(1, 0, n-1);}
	ll query(int l, int r) {
		l = max(l, 0);
		r = min(r, int(n-1));
		return query(1, 0, n-1, l, r);
	}
};




void solution() {
	ll n, h;
	cin >> n >> h;
	vi a(n);
	for (ll &z : a) cin >> z;


	ll mx = *max_element(all(a));
		
	h = min(h, mx);
	vi dp(mx+1);

	for (int i = 0; i < n; i++) {
		vi ndp(mx+1);
		SegTree m(dp);
		m.build();

		for (int j = 0; j <= mx; j++) {
			ndp[j] = abs(j-a[i]) + m.query(j-h, j+h);
		}

		dp = move(ndp);
	}

	cout << *min_element(all(dp)) << endl;
}
#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...