Submission #1003117

#TimeUsernameProblemLanguageResultExecution timeMemory
1003117coolboy19521Rice Hub (IOI11_ricehub)C++17
0 / 100
2 ms708 KiB
#include "bits/stdc++.h" #include "ricehub.h" #define i64 long long using namespace std; const i64 sz = 2e5 + 10; i64 a[sz]; i64 n; i64 b; bool che(i64 x) { i64 lra = x / 2; i64 rra = lra - !(x % 2); i64 ps = lra; i64 sm = 0; for (i64 i = 0; i < x; i ++) { sm += abs(a[i] - a[ps]); } // cout << x << ' ' << ps << ' ' << sm << '\n'; if (sm <= b) { return true; } ps ++; for (; ps < n - rra; ps ++) { i64 pps = ps - 1; // previous ps sm -= abs(a[pps - lra] - a[pps]); // delete leftmost // if (0 < rra) { // if x is not 2 sm -= abs(a[pps] - a[ps]); // delete new ps sm -= (rra - 1); // distance to right decreases sm += abs(a[ps + rra] - a[ps]); // add rightmost // } sm += abs(a[pps] - a[ps]); // add previous ps sm += (lra - 1); // distance to left increases // cout << x << ' ' << ps << ' ' << sm << '\n'; if (sm <= b) { return true; } } return false; } int besthub(int R, int L, int X[], long long B) { i64 le, ri; le = 0, ri = R + 1; for (i64 i = 0; i < R; i ++) { a[i] = X[i]; } b = B; n = R; while (1 < ri - le) { i64 mi = le + (ri - le) / 2; if (che(mi)) { le = mi; } else { ri = mi; } } return le; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...