제출 #1229639

#제출 시각아이디문제언어결과실행 시간메모리
1229639boris_mihov나일강 (IOI24_nile)C++20
17 / 100
2093 ms4944 KiB
#include "nile.h" #include <algorithm> #include <iostream> #include <numeric> #include <cassert> #include <vector> typedef long long llong; const int MAXN = 100000 + 10; const llong INF = 1e18; int n; struct Delivery { int a, b, w; friend bool operator < (const Delivery &a, const Delivery &b) { return a.w < b.w; } }; Delivery s[MAXN]; llong rangeQuery(int l, int r, int d) { llong sum = 0; for (int i = l ; i <= r ; ++i) { sum += s[i].b; } if ((r - l + 1) % 2 == 0) { return sum; } llong ans = INF; for (int i = l ; i <= r ; i += 2) { ans = std::min(ans, sum - s[i].b + s[i].a); } for (int i = l + 1 ; i <= r ; i += 2) { if (s[i + 1].w - s[i - 1].w <= d) { ans = std::min(ans, sum - s[i].b + s[i].a); } } return ans; } int query(int d) { int last = 1; llong answer = 0; for (int i = 2 ; i <= n ; ++i) { if (s[i].w - s[i - 1].w > d) { answer += rangeQuery(last, i - 1, d); last = i; } } answer += rangeQuery(last, n, d); return answer; } std::vector<long long> calculate_costs(std::vector <int> W, std::vector <int> A, std::vector <int> B, std::vector <int> E) { n = W.size(); for (int i = 1 ; i <= n ; ++i) { s[i].w = W[i - 1]; s[i].a = A[i - 1]; s[i].b = B[i - 1]; } std::sort(s + 1, s + 1 + n); std::vector <llong> sol; for (const int &d : E) { sol.push_back(query(d)); } return sol; }
#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...