This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#include <iostream>
#include <set>
#include <vector>
using namespace std;
using ll = long long;
int main()
{
ios_base::sync_with_stdio(false);
cin.tie(NULL);
int N;
ll H;
cin >> N >> H;
ll s0;
cin >> s0;
multiset<ll> left;
ll left_lp = 0;
multiset<ll> right;
ll right_lp = 0;
left.insert(s0);
right.insert(s0);
ll ans = 0;
for(int i = 2; i <= N; i++)
{
ll S;
cin >> S;
left_lp -= H;
right_lp += H;
if(S <= left_lp + *left.rbegin())
{
ans += left_lp + *left.rbegin() - S;
right.insert(-right_lp + *left.rbegin() + left_lp);
left.erase(left.find(*left.rbegin()));
left.insert(S - left_lp);
left.insert(S - left_lp);
}
else if(S >= right_lp + *right.begin())
{
ans += S - (right_lp + *right.begin());
left.insert(-left_lp + *right.begin() + right_lp);
right.erase(right.find(*right.begin()));
right.insert(S - right_lp);
right.insert(S - right_lp);
}
else
{
left.insert(-left_lp + S);
right.insert(-right_lp + S);
}
}
cout << ans << '\n';
}
# | 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... |