이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#include <iostream>
#include <stdio.h>
#include <array>
#include <algorithm>
#include <cmath>
#include <queue>
/*
void showq(std::priority_queue<int> qL, std::priority_queue<int, std::vector<int>, std::greater<int>> qR)
{
while(!qL.empty())
{
std::cout << qL.top() << ' ';
qL.pop();
}
while(!qR.empty())
{
std::cout << ' ' << qR.top();
qR.pop();
}
std::cout << std::endl;
return;
}
*/
int main()
{
//freopen("duotaB.txt", "r", stdin);
int n, h;
std::cin >> n >> h;
int arr[n];
for(int i = 0; i < n; i++)
std::cin >> arr[i];
std::priority_queue<int> qL;
std::priority_queue<int, std::vector<int>, std::greater<int>> qR;
int min = 0;
qL.emplace(arr[0]);
qR.emplace(arr[0]);
//showq(qL, qR);
for(int i = 1; i < n; i++)
{
if(arr[i] + h*i < qL.top())
{
qL.emplace(arr[i] + h*i);
qL.emplace(arr[i] + h*i);
min += qL.top() - arr[i] - i*h;
qR.emplace(qL.top() - 2*i*h);
qL.pop();
}
else if(arr[i] - h*i > qR.top())
{
qR.emplace(arr[i] - h*i);
qR.emplace(arr[i] - h*i);
min += arr[i] - i*h - qR.top();
qL.emplace(qL.top() + 2*i*h);
qR.pop();
}
else
{
qL.emplace(arr[i] + i*h);
qR.emplace(arr[i] - i*h);
}
//showq(qL, qR);
}
std::cout << min;
return 0;
}
# | 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... |