省选模拟38

A. Inverse

  这个题考场上打的有点恶心,导致调的时间有点长最后没优化出来,常数还挂了,被卡成暴力分。。。

  考虑dp,令$f[i][j][k]$表示第$i$次操作小的点在j大的点在k,最终形成逆序对的方案数。

  暴力枚举当前选择的区间的话复杂度是$n^4k$的,仔细看可以发现转移到的状态是$O(n)$的,所以对于每种状态转移就是$n^3k$的,考场上打了这个然而被卡成$n^4k$的分,之后卡了卡常就66分了。

  实际上可以发现这个东西可以继续优化,预处理出来前缀和的前缀和就可以做到$O(1)$转移了,总复杂度$O(n^2k)$

  吐槽一句,这个noi跑的是真的慢。。。

B. Subsequence

  这个题很像之前考过的某道题,那道题的做法就是用平衡树维护差分数组,这道题好像几乎一样。。。考场上给的时间太少了。

  考虑一个暴力的dp,打个表或者大力猜结论,可以发现存在一个状态转移的分界点。

  这个分界点可以通过差分数组在平衡树上二分得到,然后就变成了简单的单点插入,后缀加,直接操作就行了。

C. Convex

  考场上感觉不太可做,打了40暴力就跑了,然后取模写挂成5分。

  考虑维护分界点,被当前枚举的点和分界点分开的两块中的一块保证始终不大于另一块,这个用简单的单调指针就可以实现。

  然后考虑如何快速算出来当前点到分界点之间的贡献,发现选择一个固定的点当成基准点的话,那么每个块的面积都可以简单用前缀和计算。

扫描二维码关注公众号,回复: 9605325 查看本文章

  为了方便,选取原点当做基准点,于是就需要叉积的前缀和和前缀和的前缀和,和横纵坐标的前缀和,直接维护即可。

猜你喜欢

转载自www.cnblogs.com/hzoi-cbx/p/12423106.html