Submission #1302689

#TimeUsernameProblemLanguageResultExecution timeMemory
1302689kawhiet나일강 (IOI24_nile)C++20
32 / 100
112 ms16468 KiB
#include <bits/stdc++.h> #include "nile.h" using namespace std; vector<long long> calculate_costs(vector<int> w, vector<int> a, vector<int> b, vector<int> e) { int n = w.size(); int q = e.size(); vector<array<int, 2>> qs(q); for (int i = 0; i < q; i++) { qs[i] = {e[i], i}; } vector<array<int, 3>> to_sort; for (int i = 0; i < n; i++) { to_sort.push_back({w[i], a[i], b[i]}); } sort(to_sort.begin(), to_sort.end()); for (int i = 0; i < n; i++) { w[i] = to_sort[i][0]; a[i] = to_sort[i][1]; b[i] = to_sort[i][2]; } vector<array<int, 2>> diff; for (int i = 1; i < n; i++) { diff.push_back({w[i] - w[i - 1], i}); } sort(diff.rbegin(), diff.rend()); int j = 0, cur = n + (n & 1); sort(qs.rbegin(), qs.rend()); vector<long long> ret(q); set<int> l, r; l.insert(0); r.insert(n - 1); for (auto [d, pos] : qs) { while (j < n - 1 && diff[j][0] > d) { int k = diff[j][1]; auto tl = --l.upper_bound(k); auto tr = r.lower_bound(*tl); if ((*tr - *tl + 1) & 1) cur--; if ((k - *tl) & 1) cur++; if ((*tr - k + 1) & 1) cur++; l.insert(k); r.insert(k - 1); j++; } ret[pos] = cur; } return ret; }
#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...