Submission #261630

#TimeUsernameProblemLanguageResultExecution timeMemory
261630c4ts0up쌀 창고 (IOI11_ricehub)C++17
17 / 100
23 ms1912 KiB
#include "ricehub.h"
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;

ll n;
vector <ll> arr;

int besthub(int R, int L, int X[], ll B) {
	//cerr << "Entrando a besthub..." << endl;
	
	n = (ll)R;
	
	// creamos el arreglo
	for (ll i=0; i<n; i++) arr.push_back((ll)X[i]);
	
	ll lb = 0, ub = 0, suma = 0LL, prev, maxi = 1LL;
	
	//cerr << "Entrando al loop..." << endl;
	for (ll i=0; i<n; i++) {
		//cerr << "I = " << i << endl;
		// 1. Actualizamos la suma
		if (!i) {} // no toca si i == 0
		else {
			//cerr << "La suma paso de " << suma << " a ";
			
			suma -= ((ub-(i-1))*(abs(prev-arr[i])));
			suma += ((i-lb)*(abs(prev-arr[i])));
			
			//cerr << suma << endl;
		}
		
		// 2. Recogemos lb
		while (suma > B) {
			suma -= abs(arr[lb]-arr[i]);
			lb++;
		}
		
		// 3. Expandimos ub
		while (ub+1 < n) {
			if (suma + abs(arr[ub+1]-arr[i]) <= B) suma += abs(arr[ub+1]-arr[i]), ub++;
			else break;
		}
		
		//cerr << "Nuevos valores, lb = " << lb << ", ub = " << ub << endl;
		
		// 4. Contar
		maxi = max(maxi, ub-lb+1);
		
		prev = arr[i];
	}
	
	return maxi;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...