이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#include <iostream>
#include <queue>
#include <algorithm>
#include <vector>
using ll = long long int;
ll h;
int main()
{
std::priority_queue<ll> leftprioq;
std::priority_queue<ll,
std::vector<ll>,
std::greater<ll> > rightprioq;
ll n, x, ans = 0;
std::cin >> n >> h;
std::cin >> x;
leftprioq.push(x);
rightprioq.push(x);
for (int i = 1; i < n; ++i)
{
std::cin >> x;
ll leftnodepos = leftprioq.top() - h*i;
ll rightnodepos = rightprioq.top() + h*i;
// std::cout << "i: " << i << "\n";
// std::cout << "borders: " << leftelem.curtimepos(i) << " " << rightelem.curtimepos(i) << "\n";
if (x < leftnodepos)
{
leftprioq.pop();
leftprioq.push(x + h * i);
leftprioq.push(x + h * i);
ans += leftnodepos - x;
// std::cout << "left: " << nextleftpos << " " << leftnodepos << "\n";
rightprioq.push(leftnodepos - h * i);
}
else if (x > rightnodepos)
{
rightprioq.pop();
rightprioq.push(x - h*i);
rightprioq.push(x - h*i);
ans += x - rightnodepos;
// std::cout << "right: " << rightnodepos << " " << nextrightpos << "\n";
leftprioq.push(rightnodepos + h * i);
}
else
{
leftprioq.push(x + h *i);
rightprioq.push(x-h*i);
}
}
std::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... |