# | 제출 시각 | 아이디 | 문제 | 언어 | 결과 | 실행 시간 | 메모리 |
---|---|---|---|---|---|---|---|
672117 | Hacv16 | 쌀 창고 (IOI11_ricehub) | C++17 | 0 ms | 0 KiB |
이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#include<bits/stdc++.h>
#include "ricehub.h"
using namespace std;
typedef long long ll;
const ll INF = 5e18 + 15;
int n, x[MAX], px[MAX], L;
ll b;
ll sum(int l, int r){
return px[r] - (l == 0 ? 0 : px[l - 1]);
}
bool f(ll s){
for(int l = 0, r = s - 1; r < n; l++, r++){
int m = (l + r) >> 1;
ll cost = 0;
cost += sum(m + 1, r) - (r - m) * x[m];
cost += (m - l) * x[m] - sum(l, m - 1);
if(cost <= b) return true;
}
return false;
}
int besthub(int _n, int _L, int _x[], ll _b){
n = _n, L = _L, b = _b;
for(int i = 0; i < n; i++)
x[i] = _x[i];
for(int i = 1; i < n; i++)
px[i] = x[i] + px[i - 1];
int l = 0, r = n, ans = 0;
while(l <= r){ //bbin na resposta
int m = (l + r) >> 1;
if(f(m)) l = m + 1, ans = m;
else r = m - 1;
}
return ans;
}