省选模拟12

昨晚被zxb打呼噜吵到两点还没睡着,于是考试想补觉

但是没有睡着,于是只好去想题,于是一分钟打了第一题\(\mathcal{O(n^3)}\)的暴力

后来发现可以斜率优化到\(\mathcal{O(n^2)}\),写完之后想写递增的部分分可是不会

要是有了部分分的话就是正解了...

第二题是个交互,于是也只有暴力分,没想到二分,也没想到可以利用交集

第三题打了个最暴力的状压就走了

T1 数列array

发现每一段的最后一个一定是这一段的最大值,不然的话完全可以拆出来造成新的贡献

于是暴力的二维dp就可以变成一维的了,于是再次斜率优化,变成\(\mathcal{O(nlogn)}\)

AC_code

T2 差异difference

可以二分找到最大值或者最小值的可能位置

具体来说,询问二会有一个最大差值,就是最大值和最小值的差值,于是我们二分位置

不断询问,我们可以找到同时包含最大最小值的最小前缀,那么最后一个数要么是最大值要么是最小值

我们利用这个最值去查找和其它数的差值

用二进制拆分,对于每一位未为1的做一个集合

一次询问这个集合,再一次询问集合和最值

这样就可以找到每个数和最值的差值

由于每个数都不一样,每个差值只会出现一次

我们取这个数为一的位的集合的交集,就是这个数的差值

这样的话,判断一下最值是最大值还是最小值,然后输出就好了

AC_code

T3 异或randomxor

不会呢

上一篇:常规病例处理


下一篇:12-协程 yield\yield from