模拟测试64

T1:spa

  根据贪心策略,在价格较小的时候买入,价格较大的时候卖出,得到的价值才会更大。blog

  天天均可以和以前的一天组成匹配,贡献为差值。排序

  先用一个小根堆,维护尚未匹配的权值,从前向后扫,若堆顶比当前权值小,则组成匹配,累加差值,并将当前权值插入。im

  咱们发现,在同一天买入和卖出,等价于这天没有操做。查询

  也就是说若是连续弹出一段权值,中间的权值实际上没有被弹出。img

  咱们能够把这些权值插入第二个小根堆里,两个堆同时查询。时间

  时间复杂度$O(nlogn)$co

T2:ps

  咱们能够简单的推出$S_n^m$向四个方向的$O(1)$递推式。

  显然:$S_n^{m+1}=S_n^m+C_n^m$,$S_n^{m-1}=S_n^m-C_n^m$。

  而后考虑上下转移。

  

 

 

   能够看出,向下转移时,除了最后一行,其余组合数的贡献都是自身的2倍。

  因此能够得出:$S_{n+1}^m=2S_n^m-C_n^m$,$S_{n-1}^m=\frac{S_n^m+C_{n-1}^m}{2}$。

  而后莫队便可。

  时间复杂度$O(n\sqrt{n})$。

T3:

  大模拟。

  咱们发现,对于任何一个矩形,宽都为一,咱们能够选取两端点的上下左右共6个点等效替代这个矩形。

  对于每一个矩形,查找这6个点有没有其余矩形便可。

  先将询问离线排序,一行一行加入,用并查集维护连通性。

  开两个vector将横条插入当前行,第一个vector储存竖条的上端点,第二个储存下端点。

  每次将第一个vector的个数累加,并扫一遍在当前行的第一个vector里的矩形,更新上部的关键点。

  同时扫一边上一行的第二个vector,更新下部的关键点。

  答案既是当前矩形个数减去并查集的边数。

  时间复杂度$O(nlogn)$。

相关文章
相关标签/搜索