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)$。