Submission #1360650

#TimeUsernameProblemLanguageResultExecution timeMemory
1360650gvancakRice Hub (IOI11_ricehub)C++20
0 / 100
0 ms344 KiB
#include "ricehub.h"
#include <bits/stdc++.h>
#define f first
#define s second
#define pb push_back
#define mp make_pair
#define ll long long
using namespace std;

const ll N=1e5+5;
int a[N],n,l,p[N],ans1,ans2;
bool check(int ans,ll cost){
	int idx1=(ans+1)/2,idx2=idx1+1;
	int idx0=1;
	for (int i=ans; i<=n; i++){
		
		ans1=(p[i]-p[idx1])-(i-idx1)*a[idx1];
		ans1+=(idx1-idx0)*a[idx1]-(p[idx1-1]-p[idx0-1]);// if (ans==4) cout<<i<<" "<<idx1<<" "<<idx2<<" "<<idx0<<" "<<ans1<<" "<<ans2<<endl;
		if (ans1<=cost) return 1;
		
		ans2=(p[i]-p[idx2])-(i-idx2)*a[idx2];
		ans2+=(idx2-idx0)*a[idx2]-(p[idx2-1]-p[idx0-1]);//if (ans==4) cout<<i<<" "<<idx1<<" "<<idx2<<" "<<idx0<<" "<<ans1<<" "<<ans2<<endl;
		if (ans2<=cost) return 1;
		
		idx1++; idx2++; idx0++;
	}
	return 0;
	
	
	
	
}

int besthub(int R, int L, int X[], long long B)
{
	n=R; l=L;
	for (int i=0; i<n; i++){
		a[i+1]=X[i];
	}
	p[0]=0;
	for (int i=1; i<=n; i++) p[i]=p[i-1]+a[i];
	int x,ans=0;
	x=log2(n);
	for (int o=x; o>=0; o--){
		ans+=(1<<o);
		if (ans>n){
			ans-=(1<<o); continue;
		}
		cout<<ans<<endl;
		if (check(ans,B)==0) ans-=(1<<o);
	}
	
	return ans;
}
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...