満点だった。
L - K番目の絶対値
総和の絶対値がD以下であるような連続部分列を数える問題が解ければよさそう。累積和Si=A1+...+Ai上で言い換えると各iについて∣Si−Sj∣≤Dであるようなj<iを数えればよく、これはS0,S1,...,Si−1の中で[Si−D,Si+D]に含まれるようなものを数えることに等しい。数え上げをO(NlogN)で解くと、全体でO(NlogNlog∑i∣Ai∣)。
順序対を数えることにすれば尺取りでできる。確かに。
M - バランス
SoundHound Inc. Programming Contest 2018 Masters Tournament E - + Graph
O - 色分けトーナメント
- トーナメントは2⋅2N−1頂点の完全二分木とすると、制約(Wi,Li)はWiとLiのLCAまでWiとLiが勝ち上がってWiが勝つこととみなせる。
- ある選手を青に塗ると決めても赤に塗ると決めても有効な塗り方は同数ある。(どの有効な塗り方についても、すべての色を反転したものが有効な塗り方であるため。)
dpv[x]=頂点vを根とする部分木に属する左からx番目の選手の色を決め打った時に、部分木vに属する選手の塗り方で(部分木vに含まれる制約を満たし、かつ)vが勝ち上がるようなものの総数、とする。dpvはvの子をc1,c2としてdpc1,dpc2から線形で作れるので、下から処理していけばよい。根に関するdpの総和を2倍したものが答えになる。
各深さのdpの長さの総和はちょうど2Nになるので、全体の計算量はO(N2N+M)。