**【T1】**Cow Dating
【题目链接】
【题解链接】
【思路要点】
- 考虑如何快速计算一个区间 [ l , r ] [l,r] [l,r] 的价值。
- 定义二元组 ( x , y ) (x,y) (x,y) 来描述一个区间, x x x 表示区间中恰好有一个关键点的概率, y y y 表示区间中没有关键点的概率。显然,对于两个区间 ( x 1 , y 1 ) , ( x 2 , y 2 ) (x_1,y_1),(x_2,y_2) (x1,y1),(x2,y2) ,上述信息是可以合并的,即 ( x 1 , y 1 ) + ( x 2 , y 2 ) = ( x 1 y 2 + x 2 y 1 , y 1 y 2 ) (x_1,y_1)+(x_2,y_2)=(x_1y_2+x_2y_1,y_1y_2) (x1,y1)+(x2,y2)=(x1y2+x2y1,y1y2) ,并且,该运算存在逆运算,即 ( x 1 , y 1 ) − ( x 2 , y 2 ) = ( x 1 − y 1 ∗ x 2 y 2 y 2 , y 1 y 2 ) (x_1,y_1)-(x_2,y_2)=(\frac{x_1-y_1*\frac{x_2}{y_2}}{y_2},\frac{y_1}{y_2}) (x1,y1)−(x2,y2)=(y2x1−y1∗y2x2,y2y1) 。
- 那么,记录二元组的前缀和数组 s i s_i si ,区间 [ l , r ] [l,r] [l,r] 对应的二元组即为 s r − s l − 1 s_r-s_{l-1} sr−sl−1 。
- 考虑枚举 r r r ,最优化 l l l 的选取,即我们需要找到 l l l ,最大化 x 1 − y 1 ∗ x 2 y 2 y 2 \frac{x_1-y_1*\frac{x_2}{y_2}}{y_2} y2x1−y1∗y2x2 。记 k = x 2 y 2 k=\frac{x_2}{y_2} k=y2x2 ,即最大化 x 1 − k ∗ y 1 x_1-k*y_1 x