Submission #15707

#TimeUsernameProblemLanguageResultExecution timeMemory
15707gs14004Holiday (IOI14_holiday)C++14
23 / 100
5000 ms2248 KiB
#include"holiday.h"
#include <cstdio>
#include <queue>
#include <algorithm>
using namespace std;
typedef long long lint;
priority_queue<int, vector<int>, greater<int> > pq;

lint ret;
int *a, st, dist;

void divConq(int s, int e, int rs, int re){ // boilerplate
	if(s > e) return;
	int m = (s+e)/2;
	lint copt = 0, cres = 0;
	int opt = 0;
	for(int i=m; i<rs; i++){
		pq.push(a[i]);
		copt += a[i];
	}
	for(int i=rs; i<=re; i++){
		pq.push(a[i]);
		copt += a[i];
	    while(!pq.empty() && (int)pq.size() > dist - (i - m + min(i - st, st - m) )){
            copt -= pq.top();
            pq.pop();
        }
        if(cres < copt){
        	cres = copt;
        	opt = i;
        }
	}
	ret = max(ret, cres);
	while(!pq.empty()) pq.pop();
	divConq(s,m-1,rs,opt);
	divConq(m+1,e,opt,re);
} 

long long int findMaxAttraction(int n, int start, int d, int attraction[]) {
	a = attraction;
	st = start;
	dist = d;
	divConq(0, start, start, n-1);
	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...