제출 #676134

#제출 시각아이디문제언어결과실행 시간메모리
676134esomer쌀 창고 (IOI11_ricehub)C++17
100 / 100
34 ms7704 KiB
#include<bits/stdc++.h>
 
using namespace std;
 
#define ll long long
#define endl "\n"
 
const int MOD = 998244353;

int findright(int val, vector<int>& v){
	int lo = 0;
	int hi = (int)v.size() - 1;
	int bst;
	while(lo <= hi){
		int mid = (lo + hi) / 2;
		if(v[mid] <= val){
			bst = mid;
			lo = mid + 1;
		}else hi = mid - 1;
	}
	return bst;
}

int findleft(int val, vector<int>& v){
	int lo = 0;
	int hi = (int)v.size() - 1;
	int bst;
	while(lo <= hi){
		int mid = (lo + hi) / 2;
		if(v[mid] >= val){
			bst = mid;
			hi = mid - 1;
		}else lo = mid + 1;
	}
	return bst;
}

int besthub(int R, int L, int* X, long long B){
	vector<ll> prefix(R);
	vector<int> v(R);
	for(int i = 0; i < R; i++) v[i] = X[i];
	prefix[0] = X[0];
	map<int, int> m;
	m[X[0]]++;
	for(int i = 1; i < R; i++){
		prefix[i] = prefix[i - 1] + X[i];
		m[X[i]]++;
	}
	int ans = 0;
	int l = 0;
	int r = 0;
	while(r < R){
		int i = l + (r - l + 1) / 2;
		int right = r;
		int left = l;
		ll trucksr = right - i;
		ll trucksl = i - left;
		ll ind = X[i];
		ll cost = prefix[right] - prefix[i] - (trucksr * ind);
		ll x = 0;
		if(left > 0) x = prefix[left - 1];
		cost += ((trucksl + 1) * ind) - (prefix[i] - x);
		if(cost > B){
			l++;
			continue;
		}
		int trucks = trucksr + trucksl + 1;
		ans = max(ans, trucks);
		r++;
	}
	//~ for(int i = 0; i < R; i++){
		//~ if(m[X[i]] > ans){
			//~ ans = m[X[i]];
			//~ pl = X[i];
		//~ }
		//~ ll lo = 1;
		//~ ll hi = L;
		//~ while(lo <= hi){
			//~ ll mid = (lo + hi) / 2;
			//~ int right = findright(X[i] + mid - 1, v);
			//~ int left = findleft(X[i] - mid + 1, v);
			//~ ll trucksr = right - i;
			//~ ll trucksl = i - left;
			//~ ll ind = X[i];
			//~ ll cost = prefix[right] - prefix[i] - (trucksr * ind);
			//~ ll x = 0;
			//~ if(left > 0) x = prefix[left - 1];
			//~ cost += ((trucksl + 1) * ind) - (prefix[i] - x);
			//~ if(cost > B){
				//~ hi = mid - 1;
				//~ continue;
			//~ }
			//~ int trucks = trucksr + trucksl + 1 + min((B - cost) / mid, (ll)(m[X[i] + mid] + m[X[i] - mid]));
			//~ if(trucks > ans){
				//~ ans = trucks;
				//~ pl = X[i];
			//~ }
			//~ lo = mid + 1;
		//~ }
	//~ }
	return ans;
}
 
//~ signed main(){
    //~ ios_base::sync_with_stdio(0);
    //~ cin.tie(0);

    //~ //freopen("inpt.txt", "r", stdin);
    //~ //freopen("out.txt", "w", stdout);
	
    //~ int tt; cin >> tt;
    //~ //int tt = 1;
    //~ for(int t = 1; t <= tt; t++){
        //~ solve();
    //~ }
//~ }

컴파일 시 표준 에러 (stderr) 메시지

ricehub.cpp: In function 'int findright(int, std::vector<int>&)':
ricehub.cpp:21:9: warning: 'bst' may be used uninitialized in this function [-Wmaybe-uninitialized]
   21 |  return bst;
      |         ^~~
ricehub.cpp: In function 'int findleft(int, std::vector<int>&)':
ricehub.cpp:35:9: warning: 'bst' may be used uninitialized in this function [-Wmaybe-uninitialized]
   35 |  return bst;
      |         ^~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...