제출 #1203620

#제출 시각아이디문제언어결과실행 시간메모리
1203620shadow_sami휴가 (IOI14_holiday)C++20
30 / 100
260 ms1728 KiB
#include "holiday.h"
#include<bits/stdc++.h>
#include<ext/pb_ds/assoc_container.hpp>
#include<ext/pb_ds/tree_policy.hpp>
using namespace std;
using namespace __gnu_pbds;
typedef long long ll;
typedef vector<ll> vi;
typedef pair<ll,ll> pi;
#define ff first
#define ss second
#define fip(a,b) for(ll i = a ; i < b; i++)
#define fjp(a,b) for(ll j = a ; j < b; j++)
#define fp(k,a,b) for(ll k = a ; k < b; k++)
#define fin(a,b) for(ll i = a ; i >= b; i--)
#define fjn(a,b) for(ll j = a ; j >= b; j--)
#define fn(k,a,b) for(ll k = a ; k >= b; k--)
#define fx(a) for(auto x:a)
#define ordered_set tree<ll,null_type,less<ll>,rb_tree_tag,tree_order_statistics_node_update>
#define nli "\n"
#define test ll t;cin>>t;while(t--)

void _printn(int a){cerr<<a<<" ";}
void _printn(ll a){cerr<<a<<" ";}
void _printn(bool a){cerr<<a<<" ";}
void _printn(double a){cerr<<a<<" ";}

template<class T> void _printn(vector<T> a);
template<class T,class V> void _printn(pair<T,V> a);
template<class T> void _printn(vector<T> a){
	cerr<<"[  ";
	fx(a){
		_printn(x);cerr<<" ";
	}
	cerr<<"]";
}

template<class T,class V> void _printn(pair<T,V> a){
	cerr<<"( ";
	_printn(a.ff);
	cerr<<",";
	_printn(a.ss);
	cerr<<")";
}

auto cmp = [](ll aa,ll bb){
	return aa > bb;
};

priority_queue<ll,vector<ll>,decltype(cmp)> pq(cmp),pq2(cmp);

#ifdef SAMI
	#define debug(x) cerr<<#x<<" : ";_printn(x);cerr<<nli;
	#define debg() cerr<<nli;
	void deb(){
		pq2 = pq;
		while(pq2.size()){
			cerr<<pq2.top()<<" ";
			pq2.pop();
		}
		cerr<<nli;
	}
#else
	#define debug(x)
	#define debg()
	void deb(){
		return;
	}
#endif

const ll mx = 1e5 + 5;
const ll mod = 1e9 + 7;
bool f = 0;
ll n,m,res,cnt,sum,tp,tp2,tptp,ans;


long long int findMaxAttraction(int n, int start, int d, int attraction[]) {
	ans = -1e18;
	res = 0;
	sum = 0;
	fin(start,0){
		while(pq.size())pq.pop();
		sum = 0;
		fjn(start,i){
			sum += attraction[j];
			pq.push(attraction[j]);
			deb();
		}
		res = start - i;
		
		while(pq.size() > d-res){
			sum -= pq.top();
			pq.pop();
		}
		debug(d);
		debug(res);
		debug(i);
		debug(sum);
		deb();		
		if(d-res>=0)
			ans = max(ans,sum);
		fjp(start+1,n){
			sum += attraction[j];
			pq.push(attraction[j]);
			while(pq.size() > d-res-(j-i)){
				sum -= pq.top();
				pq.pop();
			}
			debug(res+(j-i))
			debug(j);
			debug(sum);
			deb();
			if(d-res-(j-i)>=0)
				ans = max(ans,sum);
		}
		debg();
	}
	// fip(start,n){
	// 	while(pq.size())pq.pop();
	// 	sum = 0;
	// 	fjp(start,i+1){
	// 		sum += attraction[j];
	// 		pq.push(attraction[j]);			

	// 	}
	// 	res = abs(start - i);		
	// 	while(pq.size() > d-res){
	// 		sum -= pq.top();
	// 		pq.pop();
	// 	}			
	// 	if(d-res>=0)
	// 		ans = max(ans,sum);
	// 	fjn(start-1,0){
	// 		sum += attraction[j];
	// 		pq.push(attraction[j]);
	// 		while(pq.size() > d-res-(i-j)){
	// 			sum -= pq.top();
	// 			pq.pop();
	// 		}			
	// 		if(d-res-(i-j)>=0)
	// 			ans = max(ans,sum);
	// 	}
	// 	debg();
	// }
    return ans;
}

#ifdef SAMI

int main() {	
	freopen("input1.txt","r",stdin);
	freopen("output1.txt","w",stdout);
	freopen("error1.txt","w",stderr);
    int n, start, d;
    int attraction[100000];
    int i, n_s;
    n_s = scanf("%d %d %d", &n, &start, &d);
    for (i = 0 ; i < n; ++i) {
	n_s = scanf("%d", &attraction[i]);
    }
    printf("%lld\n", findMaxAttraction(n, start, d,  attraction));
    return 0;
}
#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...