莫队
文章平均质量分 70
Icefox_zhx
这个作者很懒,什么都没留下…
展开
-
bzoj4542 [HNOI2016]大数(莫队+离散化+数学)
首先有一个性质:如果A*10^k+B=B(mod p),且p和10^k互质,则A%p=0。 那么,要判断一个s[l...r]是否是p的倍数,只要判断s[l...n]和s[r+1...n]在模n的意义下是否相等。 于是,我们可以预处理出每一个后缀s[i...n]对p取模的结果a[i]。然后对于一个询问[l,r],就转化成了询问[l,r+1]中有多少对相同的a[i]。用莫队算法就可以解决了。 当原创 2017-07-19 15:38:29 · 390 阅读 · 0 评论 -
bzoj1878 [SDOI2009]HH的项链(离线+树状数组/莫队)
这题首先在线是没法做的,所以我们可以考虑离线算法 首先记录下每种颜色的下一种颜色所在的位置 将所有询问按照左端点进行排序 将所有颜色的第一个点x a[x]++ 然后从左往右扫 扫到一个点x将a[next[x]]++ 碰到一个询问l,r输出sum[r]-sum[l-1] 其中sum是a数组的前缀和,求前缀和可以用树状数组 或者也可以直接上莫队,题解:http://www.elijahq原创 2018-01-10 17:27:37 · 291 阅读 · 0 评论 -
bzoj4358 permu(莫队+线段树||莫队+并查集+分块||K-D tree)
很久以前的坑=,= 题意:给你一个排列序列,每次询问问l,r区间内最长的值域连续段长度。范围50000,长得就像莫队-,-。怎么转移呢,首先有一个比较明显的做法,用数值建一棵线段树,维护最大子段和。这样的复杂度是(nn−√logn)(n\sqrt nlogn)的,但是常数巨大,不太好卡过去。。。按堆建树,从下往上推,蜜汁分块大小,居然卡过去了。欣慰,附上代码。然而正解是这样的:我们对每一个数都记一原创 2017-08-03 11:55:50 · 1054 阅读 · 0 评论 -
CF 86D Powerful array(莫队)
挺裸的莫队,然而我用lld输出T掉了???改成I64d输出就过了???有毒。 #include #include #include #include #define ll long long #define N 200010 int n,m,a[N],f[1000005],block; bool vis[N]; ll ans=0,ANS[N]; inline int read(){ i原创 2017-07-26 12:37:03 · 362 阅读 · 0 评论 -
bzoj2038[2009国家集训队]小Z的袜子(hose)(莫队板子)
给定序列a[1]~a[n],a[i]表示i的颜色,多次询问区间L~R中选出两个位置颜色相同的概率 N,Q 若我们已知L~R区间出现的颜色为c1~ck,次数cnt1~cntk 概率表达式? 若我们已知[L,R]的信息(cnt,P),我们可以O(1)将它更新为[L+1,R]/[L-1,R]/[L,R-1]/[L,R+1].此即为莫队算法。 我们将询问以[(l-1)/sqr原创 2017-07-11 14:47:23 · 422 阅读 · 0 评论 -
bzoj3809 Gty的二逼妹子序列(莫队+分块)
很显然的做法是莫队+树状数组,但是我T了。。是我姿势不对么。。。可能常数起飞了吧。。比较好的方法是莫队+分块。对权值分块。那么每个询问就变成了求区间和,可以在O(sqrt(N))解决,而每次莫队的转移则变成了O(1),那么总的复杂度就是O((N+M)*sqrt(N))了,可以过。至于分块大小,我试了试sqrt(n),sqrt(n/2),sqrt(n*2/3),运行时间都差不多。。。 #inclu原创 2017-07-23 13:10:44 · 317 阅读 · 0 评论 -
bzoj3052 [wc2013]糖果公园(树上莫队,带修改)
树上莫队参见spoj_cot2,带修改莫队参见bzoj2120.这道题就是把这俩和在一起了╭(╯^╰)╮。bzoj上时间很宽松。。大家如果没把握还是不要去爆oj了的好。给大家推荐个好地方UOJ,这题的题号是58。可以先在那过了再说。。uoj的评测机好好的说。。顺便我树上莫队也是从建了uoj的vfk那里学来的。。大家可以去搜一下他的博客。我在这里放链接是不是算侵权??不懂。。只能orz神犇。(因为打原创 2017-07-21 21:19:46 · 614 阅读 · 0 评论 -
CF 375D Tree and Queries(子树询问,转化为序列莫队)
题意:给定一棵树,每个点有颜色,m个询问vi,ki,问以vi为根的子树中有多少种颜色出现的次数>=ki。首先我们可以通过dfn把子树询问变成序列询问。(不会看代码,一颗子树中的顶点的dfn一定是连续的,画画就知道了)然后就是经典的莫队了,至于ans怎么更新,见代码啦~原创 2017-07-20 16:02:15 · 386 阅读 · 0 评论 -
CF 700D Huffman Coding on Segment(huffman编码分块+莫队)
题意:给定一段序列a,q个询问l,r, 求a[l]..a[r]的huffman编码长度。首先huffman编码长度怎么算呢。。其实就是以每种字符出现的次数为点权,建一棵huffman树,边权为1,它的WPL其实就是这段字符huffman编码的长度。所以我们就用莫队维护一下每个字符出现的次数啦,然后模拟建huffman树求WPL啦(可以用优先队列)。结果就TLE了。想想怎么可能这么简单吗!!我们对于原创 2017-07-20 16:12:47 · 569 阅读 · 0 评论 -
bzoj3781 小B的询问(莫队)
赤裸裸的莫队。 #include #include #include #include #define N 50005 using namespace std; int n,m,k,a[N],f[N],ans=0,block=0,ANS[N]; inline int read(){ int x=0,f=1;char ch=getchar(); while(ch'9'){if(ch==原创 2017-07-20 16:53:39 · 281 阅读 · 0 评论 -
spoj_cot2 Count on a tree II(树上莫队+离散化)
题意:给两个点u,v,询问两点路径上有多少种不同的权值。树上莫队。然后权值要离散化。树上区间转移呢,基本就是这样的:记上次询问的两点为lastu,lastv,现在询问的两点为u,v,那么对于路径(lastu,u)上的所有点的存在性取反(就是原来答案里有就删掉,没有就加上),对于(lastv,v)同理。但是因为还有讨厌的lca的存在,所以我们一直都没把lca放在答案里。最后记答案时单独处理lca。具原创 2017-07-20 15:30:12 · 490 阅读 · 0 评论 -
bzoj3289 Mato的文件管理(树状数组求逆序对+莫队+离散化)
首先明确,求交换次数最小其实就是求逆序对的个数。可以用树状数组方便地进行求解。然后题目没说文件大小的范围,我们就赶紧怕怕的采取了离散化。我们还发现这题可以O(logn)的由[l,r]=>[l-1,r]等等。。所以,莫队,就是你啦!具体细节见代码。 #include #include #include #include #include using namespace std; #def原创 2017-07-19 16:41:11 · 404 阅读 · 0 评论 -
bzoj2120 数颜色(莫队)
带修改的莫队板子。听说按n^ 2/3分块更快??其实无非就是多了个修改,我们为每一个询问打上一个时间戳。然后照做无误就好了。只是在每一次做之前,先看看时间戳对不对。。不对的就给他暴力改对。所以对每一个修改我们要记该位置改之前和改之后是什么样子的。。 #include #include #include #include #define ll long long #define N 200原创 2017-07-19 16:34:47 · 326 阅读 · 0 评论 -
spoj D-query (莫队)
查一段区间出现的不同数字个数,赤裸裸的莫队。 网上那些spoj的题号都是哪来的。。我怎么找不到题号呢。。 #include #include #include #include #define ll long long #define M 200005 using namespace std; int n,m,f[1000005],a[30005],ANS[M],block,ans;原创 2017-07-19 16:07:32 · 306 阅读 · 0 评论 -
bzoj3236 [Ahoi2013]作业(莫队+分块)
对查询莫队处理,查询区间和分块处理。 复杂度O((n+m)n−√)O((n+m)\sqrt n) 如果用莫队+BIT的话,复杂度是O(nn−√logn)O(n\sqrt nlogn) 其实也是树套树裸题?O(nlog2n)O(nlog^2n)原创 2018-04-22 19:34:20 · 221 阅读 · 0 评论