Submission #830190

#TimeUsernameProblemLanguageResultExecution timeMemory
830190OAleksaRice Hub (IOI11_ricehub)C++14
68 / 100
9 ms1088 KiB
#include <bits/stdc++.h>
#include "ricehub.h"
#define f first
#define s second
using namespace std; 
 
int besthub(int R, int L, int X[], long long B)
{
  	int n = R;
  	int a[n];
  	for(int i = 0;i < n;i++)
  		a[i] = X[i];
	int ans = 1;
	int l = 0, r = 0;
	const int inf = 1e9 + 69;
	long long t = 0;
	while(r < n - 1 && t + a[r + 1] - a[0] <= B) {
		++r;
		t += (a[r] - a[0]);
		++ans;
	}
	for(int i = 1;i < n;i++) {
		if(i > r) {
			l = r = i;
			t = 0;
			while(r < n - 1 && t + a[r + 1] - a[i] <= B) {
				++r;
				t += (a[r] - a[i]);
			}
		}
		else {
			t -= (r - i + 1) * (a[i] - a[i - 1]);
			t += (i - l) * (a[i] - a[i - 1]);
			while(t > B) {
				if(a[i] - a[l] >= a[r] - a[i]) 
					t -= (a[i] - a[l++]);
				else 
					t -= (a[r--] - a[i]);
			}
			while(l < i && r < n - 1 && a[r + 1] - a[i] <= a[i] - a[l]) {
				t += a[r + 1] - a[i];
				t -= (a[i] - a[l]);
				++r, ++l;
			}
			while(t <= B) {
				int x = inf, y = inf;
				if(l > 0)
					x = a[i] - a[l - 1];
				if(r < n - 1)
					y = a[r + 1] - a[i];
				if(t + x > B)
					x = inf;
				if(t + y > B)
					y = inf;
				if(x == inf && y == inf)
					break;
				if(x <= y)
					t += x, --l;
				else
					t += y, ++r;
			}
		}
		ans = max(ans, r - l + 1);
	}
	return ans;
}
 
// signed main()
// {
	// ios_base::sync_with_stdio(false);
	// cin.tie(0);
	// cout.tie(0);
	// int tt = 1;
	// //cin >> tt;
	// while(tt--) {
		 // int n, k;
		 // long long x;
		 // cin >> n >> k >> x;
		 // int a[n];
		 // for(int i = 0;i < n;i++)
		 	// cin >> a[i];
		// cout << besthub(n, k, a, x);
	// }
   // return 0;
// }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...