1. int n, a[n];
#define all(a) a,a+n
sort(all(a));
upper_bound(all(a), R) -
lower_bound(all(a), L)
2.
n + sort()
b = [(1,2), (2,1), (3,0), (10,3)]
/** O(n \log n) */
upper_bound(b, (X, R)) -
lower_bound(b, (X, L))
/** \Theta(\log n) */
3. L = 1, R = 1
while (a[R] < x) // O(logK)
R *= 2
/** R < 2K */
binarySearch(L, R) // O(logK)
Задача:
deg P = 2*k + 1
a[deg P] > 0
Найти любой корень?
Бинпоиск
R = 1, 2, 4, 8, ... P(R)>0
L = -1, -2, -4, ... P(L)<0
double
eps = 1e-15
L,R = 10^{15}
//while (R - L > eps)
while (R - L > max(1, abs(R) + abs(L)) * eps)
M=(L+R)/2
(P(M)<0 ? L : R) = M
4. O(N * log max(a_i))
Бинарный поиск по ответу
L = 0, R = max(a_i)
while (R - L > eps)
M = (L + R) / 2
if (check(M)) // O(N)
L = M
else
R = M
5. Бинарный поиск по ответу
sort(xs)
function check(d)
last = -infty
cnt = 0
for x in xs:
if x >= last + d:
last = x
cnt += 1
return cnt >= k
6. f(i) = (A[i+1]-A[i] < 0)
Троичный ~= бинарный поиск по производной
Тернарный поиск