제출 #1193076

#제출 시각아이디문제언어결과실행 시간메모리
1193076nuutsnoynton쌀 창고 (IOI11_ricehub)C++20
17 / 100
1 ms328 KiB
#include<bits/stdc++.h> #include "ricehub.h" using ll = long long; using namespace std; ll pre_sum[100002]; ll range_sum(ll lo, ll hi) { if ( lo == 0) return pre_sum[hi]; return pre_sum[hi] - pre_sum[lo - 1]; } int besthub(int R, int L, int X[], long long B){ ll lo, hi, mid, lo1, hi1, lo2, hi2, sum; for (int i = 0; i < R; i ++) { if ( i == 0) pre_sum[i] = X[i]; else pre_sum[i] = pre_sum[i - 1] + X[i]; } ll s = 0; for (int i = 0; i < R; i ++) { lo = 0; hi = 1e9 + 1; while ( lo < hi) { mid = (lo + hi)/2; sum =0 ; lo1 = lower_bound(X, X + R, X[i] - mid) - X; hi1 = i; lo2 = i; hi2 = upper_bound(X, X + R, X[i] + mid) - X - 1; sum = sum + (hi1 - lo1 + 1) * X[i] - range_sum(lo1, hi1); sum = sum + range_sum(lo2, hi2) - (hi2 - lo2 + 1) * X[i]; if ( sum <= B) lo = mid + 1; else hi = mid; } lo --; mid = lo; sum =0 ; lo1 = lower_bound(X, X + R, X[i] - mid) - X; hi1 = i; lo2 = i; hi2 = upper_bound(X, X + R, X[i] + mid) - X - 1; sum = sum + (hi1 - lo1 + 1) * X[i] - range_sum(lo1, hi1); sum = sum + range_sum(lo2, hi2) - (hi2 - lo2 + 1) * X[i]; s = max(s, hi2 - lo1 + 1); } return s; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...