Submission #253351

#TimeUsernameProblemLanguageResultExecution timeMemory
253351eohomegrownappsHoliday (IOI14_holiday)C++14
47 / 100
5090 ms2752 KiB
#include"holiday.h" #include <bits/stdc++.h> using namespace std; typedef long long ll; ll findMaxFrom(int n, int start, int d, int attraction[]){ //from start int numwalk = d/2; int numtake = d-numwalk; priority_queue<ll,vector<ll>,greater<ll>> pq; ll tot = 0; ll ans = 0; for (int i = start; i<=min(n-1,start+numwalk); i++){ tot+=attraction[i]; pq.push(attraction[i]); } if (numtake==numwalk&&start+numwalk<=n-1){ tot-=pq.top(); pq.pop(); } ans=max(ans,tot); int cur = start+numwalk; while (cur<n-1&&numtake>0&&numwalk<d){ //walk one more numtake--; numwalk++; cur++; tot+=attraction[cur]; pq.push(attraction[cur]); tot-=pq.top(); pq.pop(); tot-=pq.top(); pq.pop(); ans=max(ans,tot); } return ans; } ll findMaxAttraction(int n, int start, int d, int attraction[]) { ll mx = 0; for (int i = max(0,start-d); i<=start; i++){ mx=max(mx,findMaxFrom(n,i,d-(start-i),attraction)); } if (n>5000){ return mx; } reverse(attraction,attraction+n); start=n-1-start; for (int i = max(0,start-d); i<=start; i++){ mx=max(mx,findMaxFrom(n,i,d-(start-i),attraction)); } return mx; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...