Submission #258396

#TimeUsernameProblemLanguageResultExecution timeMemory
258396KubinHoliday (IOI14_holiday)C++17
24 / 100
5064 ms6888 KiB
#include <bits/stdc++.h> using namespace std; struct max_sum_set { vector<int64_t> values; void insert(int64_t x) { values.push_back(x); } void erase(int64_t x) { values.erase(find(values.begin(), values.end(), x)); } int64_t get(size_t k) { k = min(k, values.size()); nth_element(values.begin(), values.begin() + k, values.end(), greater<int64_t>{}); return accumulate(values.begin(), values.begin() + k, int64_t(0)); } }; void divida_et_impera( size_t d1, size_t d2, size_t p1, size_t p2, vector<int64_t>& result, max_sum_set& V, const vector<int>& A, int mv) { if(d1 >= d2) return; size_t d = (d1 + d2) / 2, p = p1; int64_t& r = result[d]; for(size_t i = p1; i < p2 and mv*i <= d; i++) { auto v = V.get(d-mv*i); if(v > r) r = v, p = i; V.insert(A[i]); } for(size_t i = p1; i < p2 and mv*i <= d; i++) V.erase(A[i]); divida_et_impera(d1, d, p1, p+1, result, V, A, mv); for(size_t i = p1; i < p; i++) V.insert(A[i]); divida_et_impera(d+1, d2, p, p2, result, V, A, mv); for(size_t i = p1; i < p; i++) V.erase(A[i]); } vector<int64_t> best_values(vector<int> A, size_t d, int mv = 1) { A.push_back(0); vector<int64_t> result(d+1); max_sum_set V; divida_et_impera(0, d+1, 0, A.size(), result, V, A, mv); return result; } int64_t solve_right(const vector<int>& A, size_t s, size_t d) { auto R = best_values(vector<int>(A.begin() + s, A.end()), d), L = best_values(vector<int>(A.rbegin() + (A.size()-s), A.rend()), d, 2); int64_t result = 0; for(size_t r = 0; r <= d; r++) result = max(result, R[r] + L[d-r]); return result; } long long int findMaxAttraction(int n, int start, int d, int a[]) { vector<int> A(a, a + n); int64_t result = solve_right(A, start, d+1); reverse(A.begin(), A.end()); result = max(result, solve_right(A, n-1 - start, d+1)); return result; } #ifdef XHOVA int main() { int a[] = {10, 2, 20, 30, 1}; cout << findMaxAttraction(5, 2, 7, a); } #endif
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...