제출 #1245160

#제출 시각아이디문제언어결과실행 시간메모리
1245160hayford08나일강 (IOI24_nile)C++20
67 / 100
2095 ms4936 KiB
#include <iostream> #include <vector> #include <ranges> #include <algorithm> #include <numeric> #include <set> using namespace std; vector<long long> subTask5(const vector<int> &W, const vector<int> &A, const vector<int> &B, const vector<int> &E) { int n = W.size(); vector<array<int, 2>> arr(n); long long base = 0; for (int i = 0; i < n; i++) { arr[i] = {W[i], A[i] - B[i]}; base += B[i]; } ranges::sort(arr); auto compute = [&](int l, int r, int D) -> long long { int len = r - l + 1; if (len % 2 == 0) { return 0LL; } int cost = 1e9; for (int i = l; i <= r; i++) { // remove i int szLeft = i - l; if ((szLeft % 2 == 0) || (i - 1 >= l && i + 1 <= r && arr[i + 1][0] - arr[i - 1][0] <= D)) { cost = min(cost, arr[i][1]); } // (pair i - 1 and i) or (i and i + 1) else { cost = min(cost, min(arr[i - 1][1], arr[i + 1][1])); } } return cost; }; int q = E.size(); vector<long long> res(q, base); for (int i = 0; i < q; i++) { int D = E[i]; int pos = 0; while (pos < n) { int l = pos, r = pos++; while (pos < n && arr[pos][0] - arr[pos - 1][0] <= D) { r = pos++; } res[i] += compute(l, r, D); } } return res; } std::vector<long long> calculate_costs(vector<int> W, vector<int> A, vector<int> B, vector<int> E) { return subTask5(W, A, B, E); }
#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...