Submission #1249331

#TimeUsernameProblemLanguageResultExecution timeMemory
1249331NurislamRice Hub (IOI11_ricehub)C++20
17 / 100
1 ms328 KiB
#include <bits/stdc++.h>
//#include "grader.cpp"
#include "ricehub.h"

using namespace std;
typedef long long ll;

ll inf = 1e18;

int besthub(int n, int L, int A[], ll b){
	vector<int> a(n);
	for(int i = 0; i < n; i ++ ) a[i] = A[i];
	sort(a.begin(), a.end());
	ll ans = 0;
	
	ll cur = 0;
	ll l = 0, r = 0;
	
	for(int i = 0; i < n; i ++ ) {
		while(r+1 < n && a[i] - a[l] > a[r+1] - a[l]){
			r ++;
			cur += a[r] - a[i];
			cur += a[i] - a[l];
			l ++;
		};
		
		
		while(1) {
			//cout << 1 << endl;
			ll lf = (l== 0 ? inf: a[i] - a[l-1]);
			ll ri = (r==n-1 ? inf: a[r+1] - a[i]);
			
			if(lf == inf && ri == inf) break;
			
			if(lf <= ri && lf + cur <= b) {
				cur += lf;
				l -- ;
			}else if(ri < lf && ri + cur <= b) {
				cur += ri;
				r ++ ;
			}else break;
			
		};
		//cout << l << ' ' << r << ' ' << i << '\n';
		
		ans = max(ans, r-l+1);
		
		if(i+1 < n) {
			cur += ((i-l+1) - (r - i)) * (a[i+1]-a[i]); 
			if(r < i+1) r++;
			while(l <= i && cur > b) {
				cur -= (a[i+1] - a[l]);
				l ++ ;
			};
		};
	};
	
	return ans;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...