昨晚被zxb打呼噜吵到两点还没睡着,于是考试想补觉
但是没有睡着,于是只好去想题,于是一分钟打了第一题\(\mathcal{O(n^3)}\)的暴力
后来发现可以斜率优化到\(\mathcal{O(n^2)}\),写完之后想写递增的部分分可是不会
要是有了部分分的话就是正解了...
第二题是个交互,于是也只有暴力分,没想到二分,也没想到可以利用交集
第三题打了个最暴力的状压就走了
T1 数列array
发现每一段的最后一个一定是这一段的最大值,不然的话完全可以拆出来造成新的贡献
于是暴力的二维dp就可以变成一维的了,于是再次斜率优化,变成\(\mathcal{O(nlogn)}\)
AC_code
T2 差异difference
可以二分找到最大值或者最小值的可能位置
具体来说,询问二会有一个最大差值,就是最大值和最小值的差值,于是我们二分位置
不断询问,我们可以找到同时包含最大最小值的最小前缀,那么最后一个数要么是最大值要么是最小值
我们利用这个最值去查找和其它数的差值
用二进制拆分,对于每一位未为1的做一个集合
一次询问这个集合,再一次询问集合和最值
这样就可以找到每个数和最值的差值
由于每个数都不一样,每个差值只会出现一次
我们取这个数为一的位的集合的交集,就是这个数的差值
这样的话,判断一下最值是最大值还是最小值,然后输出就好了
AC_code
T3 异或randomxor
不会呢