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))的算法

这样就可以拿到满分辣

posted @ 2016-06-19 21:27  _Vertical  阅读(164)  评论(0编辑  收藏  举报