Submission #168575

#TimeUsernameProblemLanguageResultExecution timeMemory
168575johuthaHoliday (IOI14_holiday)C++14
23 / 100
64 ms7076 KiB
#include"holiday.h" #include <vector> #include <iostream> #include <set> #include <algorithm> #include <cmath> #define int long long using namespace std; struct Attractions { int n, totd; int start; vector<int> attraction; int findMaxAttr(int lstart, int d) { multiset<int> active; int cres = 0; int pos; for (pos = lstart; pos < lstart + d/2; pos++) { if (pos >= n) return cres; cres += attraction[pos]; active.insert(attraction[pos]); } if (pos == n) return cres; if (d % 2) { cres += attraction[pos]; active.insert(attraction[pos]); pos++; } /*for (int i : active) cerr << i << " "; cerr << "\n"; cerr << pos << "\n";*/ if (d % 2 == 0) { cres += attraction[pos]; active.insert(attraction[pos]); cres -= *active.begin(); active.erase(active.begin()); pos++; } int mmax = cres; for (; pos < n; pos++) { if (active.size() < 1) break; cres += attraction[pos]; active.insert(attraction[pos]); cres -= *active.begin(); active.erase(active.begin()); cres -= *active.begin(); active.erase(active.begin()); mmax = max(mmax, cres); } return mmax; } int solve() { return findMaxAttr(0, totd); } }; int findMaxAttraction(signed n, signed start, signed d, signed attraction[]) { Attractions at; at.n = n; at.start = start + n; at.totd = d; for (int i = 0; i < n; i++) { at.attraction.push_back(attraction[i]); } return at.solve(); }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...