cojs QAQ的序列 解题报告
QAQ 这是从论文上搬的一道题目
但是由于并没有找到题目地址,所以就自己造数据咯
发现数据无比难造
(本题数据极弱,暴力或可AC?)
我们考虑离线的话其实只需要莫队就可以了
那么在线怎么做呢
二进制分组?时间复杂度不是很靠谱
首先我们不难发现当k>sqrt(n)的时候,答案不会超过sqrt(n)
我们可以预处理出现次数>sqrt(n)的数字
之后我们可以分块,设S(i,k)表示前i个块中k的出现次数
每次询问扫描左右不完整的块之后枚举每个数字可以O(1)的判断出现次数是否等于K
时间复杂度O(n*sqrt(n))
当k<=sqrt(n)的时候,我们可以设Ans(i,j,k)表示i到j这些块中出现k次的数有多少个
状态是O(sqrt(n)*sqrt(n)*sqrt(n))的,所以预处理时间复杂度O(n*sqrt(n))
之后我们暴力扫描左右不完整的块对答案进行调整就可以了
时间复杂度O(n*sqrt(n))
这样综合起来我们就得到了一个O(n*sqrt(n))空间且时间为O(n*sqrt(n))的算法
这样就可以拿到满分辣