답안 #318618

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
318618 2020-11-02T14:01:50 Z MetB Safety (NOI18_safety) C++14
0 / 100
282 ms 262148 KB
#include <bits/stdc++.h>
 
#define N 2000001
 
using namespace std;
 
typedef unsigned long long ull;
typedef long long ll;
typedef long double ld;
 
const ll INF = 1e18, MOD = 998244353, MOD2 = 1e6 + 3;

ll d[2][501*1000], a[500], n, h;
vector <ll> srt;

struct window : deque < pair <ll, ll> > {
	void append (ll x, ll v) {
		while (!empty () && back ().second > v) pop_back ();
		emplace_back (x, v);
	}

	void erase (ll x) {
		if (front().first == x) pop_front ();
	}
};

int main () {
	cin >> n >> h;

	for (int i = 0; i < n; i++) {
		cin >> a[i];

		srt.push_back (a[i]);

		for (int j = 1; j <= n; j++) {
			srt.push_back (a[i] + j * h);
			srt.push_back (a[i] - j * h);
		}
	}

	sort (srt.begin(), srt.end());
	srt.erase (unique (srt.begin(), srt.end()), srt.end ());

	int sz = srt.size ();
	cout << sz << endl;

	for (int i = 0; i < sz; i++) {
		d[0][i] = abs (srt[i] - a[0]);
		//cout << d[0][i] << ' ' << srt[i] << endl;
	}

	for (int i = 1; i < n; i++) {
		int k = i % 2;
		int l = 0, r = 0;
		window wd;
		for (int j = 0; j < sz; j++) {
			while (r < sz && srt[r] <= srt[j] + h) { wd.append (r, d[!k][r]); r++; };
			while (l < r && srt[l] < srt[j] - h) { wd.erase (l); l++; };
			d[k][j] = abs (srt[j] - a[i]) + wd.front ().second;
			//cout << i << ' ' << srt[j] << ' ' << srt[l] << ' ' << srt[r-1] << ' ' << *ms.begin () << endl; 
		}
	}

	cout << *min_element (d[n-1], d[n-1] + sz);
}
# 결과 실행 시간 메모리 Grader output
1 Runtime error 1 ms 492 KB Execution killed with signal 11 (could be triggered by violating memory limits)
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Runtime error 1 ms 492 KB Execution killed with signal 11 (could be triggered by violating memory limits)
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Runtime error 1 ms 512 KB Execution killed with signal 11 (could be triggered by violating memory limits)
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Runtime error 282 ms 262148 KB Execution killed with signal 9 (could be triggered by violating memory limits)
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Runtime error 1 ms 492 KB Execution killed with signal 11 (could be triggered by violating memory limits)
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Runtime error 1 ms 492 KB Execution killed with signal 11 (could be triggered by violating memory limits)
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Runtime error 1 ms 492 KB Execution killed with signal 11 (could be triggered by violating memory limits)
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Runtime error 1 ms 492 KB Execution killed with signal 11 (could be triggered by violating memory limits)
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Runtime error 1 ms 492 KB Execution killed with signal 11 (could be triggered by violating memory limits)
2 Halted 0 ms 0 KB -