이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#include<bits/stdc++.h>
#ifndef LOCAL
#define cerr if(false)cerr
#endif // LOCAL
using namespace std;
using ll = long long;
const int N = 1e6 + 66;
int main() {
ios_base::sync_with_stdio(0);
cin.tie(0), cout.tie(0);
int n; ll d;
cin >> n >> d;
priority_queue<ll, vector<ll>, greater<ll>>R;
priority_queue<ll>L;
ll ans = 0;
for (int i = 0 ; i < n ; ++ i) {
ll x;
cin >> x;
{
auto C = L;
while (C.size()) C.pop();
while (L.size()) {
C.push(L.top() - d), L.pop();
}
L = C;
}
{
auto C = R;
while (C.size()) C.pop();
while (R.size()) {
C.push(R.top() + d), R.pop();
}
R = C;
}
if (i == 0) {
L.push(x);
R.push(x);
continue;
}
if (L.top() <= x && x <= R.top()) {
L.push(x);
R.push(x);
} else if (L.top() > x) {
assert(x <= R.top());
ans += L.top() - x;
R.push(L.top());
L.pop();
L.push(x);
L.push(x);
} else { // R.top() < x
assert(x >= L.top());
ans += x - R.top();
L.push(R.top());
R.pop();
R.push(x);
R.push(x);
}
}
cout << ans;
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |