![](https://img-blog.csdnimg.cn/20201014180756780.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
分块
gjghfd
这个作者很懒,什么都没留下…
展开
-
bzoj4216 -- 分块
如果没有内存限制,显然树状数组就可以了。 有了内存限制,我们使用分块。 因为没有修改操作,所以可以每16个数分一个块。 时间复杂度O(16*n) 注意不要用using namespace std,会占用1M不到的内存 代码: 1 #include 2 #include 3 #include 4 #include 5 #define ll long long 6 #define原创 2017-05-26 16:45:22 · 201 阅读 · 0 评论 -
bzoj2821 -- 分块
将序列分块。 令f[i][j]表示第i块到第j块的答案,可以O(n*sqrt(n))统计出来。 令sum[i][j]表示前i块值为j的数出现了几次。每次询问暴力统计零散的数对答案的贡献就可以了。 具体见代码 代码: 1 #include 2 #include 3 #include 4 #include 5 #include 6 using namespace std; 7 inl原创 2017-05-26 16:44:08 · 186 阅读 · 0 评论 -
bzoj3809 -- 莫队+分块
题目大意: 给出一个序列和m个询问,每个询问求[l,r]中权值∈[a,b]的权值的种类数。 由于询问是离线的,考虑莫队。显然可以用修改和查询为O(log2n)的树状数组维护权值种类数,但这种做法的总时间复杂度是O(n*sqrt(n)*log2m),可能会TLE。 注意到总共有O(m)个查询、O(n*sqrt(n))个修改,所以可以使用O(sqrt(n))查询、O(1)修改的分块。总时间复杂度为O(原创 2017-05-26 16:42:43 · 297 阅读 · 0 评论 -
codeforces436F Banners -- 分块
令ansians_i表示当pp等于ii时的答案。对bib_i排序,枚举cc,更新ansians_i。 考虑分块,维护每一块的最大值和取得最大值的位置。更新aia_i时,会将ans1,ans2⋯ansaians_1,ans_2\cdots ans_{a_i}加11。如果一整块加11,显然如果最大值会变化,取得最大值的位置一定是增大的。那么在要改变最大值时暴力重构整个块就可以了。原创 2017-07-11 17:45:48 · 876 阅读 · 0 评论 -
[ 带修改莫队 ] Codeforces940F Machine Learning
直接上带修改莫队。维护 mexmexmex 只需要对权值分块,每块记录出现次数,查询时找到第一个有数没出现过的块,然后在块中枚举。 #include<bits/stdc++.h> using namespace std; inline char nc(){ static char buf[100000],*p1=buf,*p2=buf; return p1==p2...原创 2018-02-26 07:22:27 · 477 阅读 · 0 评论 -
[ 决策单调性 分治 ] LOJ#535 花火
题解 #include<cstdio> #include<cstring> #include<iostream> #include<algorithm> using namespace std; typedef long long ll; inline char nc() { static char buf[100000],*p1=bu...原创 2018-03-10 11:29:08 · 402 阅读 · 0 评论