A. Maximum Increase
各 $i$ に対して,$A[i]$ が末尾であるような最大長さが求まります.
B. Powers of Two
$2^x$ と書ける数は少ないので全探索します.
C. Cellular Network
各 $a$ に対して最寄りの $b$ を探します.
D. Road to Post Office
何回目の故障のあとで歩くかを $k$ としたときの解を $f(k)$ とします.$d/k$ の近くを境界として区分線形なので,境界に近い $k$ を十分量調べればよいです.
E. Analysis of Pathes in Functional Graph
binary lifting (doubling) の基本問題です.
F. T-Shirts
クエリ列をもって同時にシミュレーションを進めていくことを考えます.値段の集合を適当な形で持っておき,
- $c$ 未満であるようなものはそのまま.
- $c$ 以上のものからは $c$ を引き ans に $+1$ という処理をする.
をしたいです.値段のソート列を平衡二分木で持ちます.$[0,c)$ はそのまま.$[c,2c)$ のものは $c$ を引いたあとで $[0,c)$ にそれぞれ再挿入.$[2c,\infty)$ は単に $c$ を引く.
とすると,挿入が起こるときには値が半分以下になるため,挿入は全体で $O(Q\log A)$ 回でおさえられます.
というので解きましたが,別解法もあると思います.クエリごとに独立に処理します.各 $k$ に対して,残金が $[2^k,2^{k+1})$ のときに使うセグメント木を作っておいて,残金が $2^k$ を下回るまでのことをシミュレーションするとします.$[0,2^k)$ だけをとって下回るパターン,$[2^k,2^{k+1})$ をどこかではじめてとるパターン,のうち最初に起こるイベントを検索という要領です.次の問題の解説を参照:https://codeforces.com/contest/1515/problem/I