제출 #1352912

#제출 시각아이디문제언어결과실행 시간메모리
1352912SpyrosAliv나일강 (IOI24_nile)C++20
23 / 100
2095 ms6352 KiB
#include "nile.h"
#include <bits/stdc++.h>
using namespace std;
#define ll long long

const ll INF = 1e9;

int n, q;
vector<int> a, b, w;

ll get_ans(int d) {
  ll tot = 0;
  ll minDiff = INF;
  int cnt = 0;
  ll curr = 0;
  for (int i = 0; i < n; i++) {
    if (i > 0 && abs(w[i] - w[i-1]) > d) {
      tot += curr;
      if (cnt & 1) tot += minDiff;
      curr = cnt = 0;
      minDiff = INF;
    }
    cnt++;
    curr += b[i];
    minDiff = min(minDiff, (ll)(a[i] - b[i]));
  }
  tot += curr;
  if (cnt & 1) tot += minDiff;
  return tot;
}

vector<ll> calculate_costs(vector<int> W, vector<int> A, vector<int> B, vector<int> E) {
  a = A;
  b = B;
  w = W;
  n = a.size();
  q = E.size();
  vector<tuple<int, int, int>> arr;
  for (int i = 0; i < n; i++) {
    arr.push_back({w[i], a[i], b[i]});
  }
  sort(arr.begin(), arr.end());
  for (int i = 0; i < n; i++) {
    w[i] = get<0>(arr[i]);
    a[i] = get<1>(arr[i]);
    b[i] = get<2>(arr[i]);
  }
  vector<ll> ans;
  for (int i = 0; i < q; i++) {
    ans.push_back(get_ans(E[i]));
  }
  return 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...