제출 #1314671

#제출 시각아이디문제언어결과실행 시간메모리
1314671joshjuiceSafety (NOI18_safety)C++20
100 / 100
37 ms3712 KiB
#include <bits/stdc++.h>
#include <ext/pb_ds/assoc_container.hpp>
#include <ext/pb_ds/tree_policy.hpp>
using namespace std;
using namespace __gnu_pbds;

typedef long long ll;
typedef long double ld;
#define ppf pop_front
#define ppb pop_back
#define pf push_front
#define pb push_back
#define fr first
#define sc second
#define mnto(x,y) x = min(x, (__typeof__(x))y)
#define mxto(x,y) x = max(x, (__typeof__(x))y)
#define setval(arr, x) memset(arr, x, sizeof(arr))

template<typename T>
using ordered_set = tree<T, null_type, less<T>, rb_tree_tag, tree_order_statistics_node_update>;

int main() {
  ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0);
  int n;
  ll h;
  cin >> n >> h;
  priority_queue<ll> lq;
  priority_queue<ll, vector<ll>, greater<ll>> rq;
  ll ans = 0;
  for (int i = 0; i < n; ++i) {
    ll a;
    cin >> a;
    if (i == 0) {
      lq.push(a);
      rq.push(a);
      continue;
    }
    ll range = (ll)i * h;
    if (a + range < lq.top()) {
      lq.push(a + range);
      ans += lq.top() - a - range;
      ll topv = lq.top();
      lq.pop();
      lq.push(a + range);
      rq.push(topv - range * 2ll);
    } else if (a - range > rq.top()) {
      rq.push(a - range);
      ans += a - range - rq.top();
      ll topv = rq.top();
      rq.pop();
      rq.push(a - range);
      lq.push(topv + range * 2ll);
    } else {
      lq.push(a + range);
      rq.push(a - range);
    }
  }
  cout << ans;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...