莫队算法
Roll_Keyboard
这个作者很懒,什么都没留下…
展开
-
BZOJ 2038 [2009国家集训队]小Z的袜子(hose) (莫队算法)
题意:给你n个数字,要进行m次查询,每次查询中,问l-r中,任意选两个数字且这两个数字相同的概率思路:第一次写莫队算法,莫队算法是一种暴力解决区间问题的一种算法。只有在区间没修改或修改的很少才能使用。 莫队算法其实很简单很暴力。如果我们知道了[l,r]区间的答案,那么我们就能o(1)地知道[l-1,r],[l,r-1],[l+1,r],[l,r+1]。这样的话,要知道[l’,r’]的答案,只要用一原创 2017-10-28 16:32:06 · 201 阅读 · 0 评论 -
Codeforces Round #466 (Div. 2) F. Machine Learning (带修莫队)
题意: 一个数组,问某个区间里面,第一个没出现的所有数出现次数的出现次数正整数思路: 题意有点毒,第二次才读对。一读题就觉得,带修莫队就可以处理了,然后我们发现需要离散化,那么我们干脆在之前就把数字离散了,因为有修改,所以最多为2e5个数,这样就很好处理了。因为是出现次数的出现次数,所以最多...原创 2018-05-24 20:13:09 · 173 阅读 · 0 评论 -
bzoj 3052/洛谷 P4074/uoj 58 [WC2013]糖果公园(树上带修莫队)
题意:UOJ地址      洛谷地址 BZOJ因为版权挂了。。。思路:     比较裸的一道树上带修莫队,我们只要维护一下某个糖出现了几次,然后更新答案即可错误及反思:   &n原创 2018-05-29 14:10:32 · 334 阅读 · 0 评论 -
bzoj 4129 Haruna’s Breakfast(树上带修莫队)
题意:思路:树上带修莫队+块状数组,基本上还是很裸的 但是写起来很麻烦,看到好多人硬是压到90多行,真是跪了 总体思路就是,树上询问和修改还是莫队,但是在查询的时候,肯定不能O(n)地去询问,而线段树因为莫队每次移动区间都需要修改,会让总体复杂度多出一个logn,所以在查答案的时候用块状数组维护,这样由块状数组产生的复杂度是O(nn−−√)O(nn)O(n\sqrt{n}),不会使...原创 2018-05-29 08:38:29 · 225 阅读 · 0 评论 -
SPOJ COT2 Count on a tree II (树上莫队)
题意:思路: 树上分块方法<-由这个题,我们可以得出一种分块方法,他能保证每个块中内部移动次数,同时也能保证块的大小 这个是讲述怎么转移的因为转移的时候,lca非常麻烦,要各种分类讨论,这个博客告诉我们,只要不管lca进行转移,最后计算结果的时候临时加上lca即可错误及反思:...原创 2018-05-26 11:58:20 · 269 阅读 · 0 评论 -
bzoj 1086 王室联邦 (dfs,构造)
题意:思路:&nbsp;&nbsp;&nbsp;&nbsp; 首先我们dfs,如果一个节点v的儿子u所在的子树大于等于B,那么就把这个子树当作一个省份,对于这种情况,省会是u,v其实都可以。如果一个儿子u所在的子树小于B,可以先暂存起来,继续遍历其他儿子,当暂存的数量大于等于B的时候,将暂存的都归为一个省,省会为v,因为会暂存的子树大小为B-1,所以这样产生的子树大小最大为2B-2,在...原创 2018-05-26 10:12:19 · 240 阅读 · 0 评论 -
HDU 3333 Turing Tree(莫队+离散化)
题意:给你一个数列,每次询问一个子区间中不同数字的和思路:http://blog.csdn.net/roll_keyboard/article/details/78380548 ↑和这个题有点像,用莫队即可,在移动区间的时候,发现某个数字是1或者0的时候判断并且更新答案即可,但是直接莫队的复杂度是O(nn‾√logn)O(n\sqrt{n}\log n)会TLE,要提前离散一下,记录下每个数值的编原创 2018-02-02 11:16:27 · 385 阅读 · 0 评论 -
bzoj 2120 数颜色(可持久化莫队)
题意:思路:第一次写带修莫队,感觉还是比较简单的,相对于普通莫队,带修莫队主要是加了一个时间标志。大致思路就是,因为区间内的东西要修改,那就干脆继续暴力的修改,把[L,R]的转移,看成[L,R,T]的转移,依旧是利用排序进行优化,可以说带修莫队依旧是个暴力的优化。 不过,这题有一个疑点,就是在查看许多的博客里面,对于带修莫队,都说block为n23n^{\frac{2}{3}}时带修莫队速度达到最原创 2017-12-14 19:53:04 · 347 阅读 · 0 评论 -
NBUT 1457 Sona (莫队算法)
题意:给你n个数字,q个询问,问[l,r]的价值,价值是每个数字出现次数的立方和思路:很基础的莫队,可是,这个oj有点毒 首先对于[l,r],我们转移为[l,r+1]的时候,只要加上去cnt[id[arr[r]]]3cnt[ id[ arr[r] ] ] ^3即可,其他的转移也很类似,也很好想,就不多说了。但是要注意这里需要离散化,并且不能直接用map,vector直接调用,要用原创 2017-12-12 18:30:27 · 271 阅读 · 0 评论 -
BZOJ 3289 Mato的文件管理(莫队+线段树/树状数组)
题意:思路:莫队+逆序数,思路还是很好想的,但是复杂度要纠结下。 对于[L,R]来说,向右边扩展,即变成了[L,R+1],就相当于只是在数组末端多了一个数,其他的操作也是同理,只要遵循,改变区间的时候,加上/减去比自己大的值即可 复杂度是莫队的o(nn‾√n\sqrt{n})乘以树状数组或者线段数查询的一个o(log(nn‾√)log(n\sqrt{n}))错误及反思:题目原创 2017-12-12 14:49:57 · 372 阅读 · 0 评论 -
BZOJ 1878 [SDOI2009]HH的项链 (莫队算法)
题意:给你n个数字,然后查询某个区间有多少种数字思路:莫队裸题,用一个cnt维护区间数字的数量就能实现o(1)转移了错误及反思:代码:#include<bits/stdc++.h>using namespace std;const int maxn= 50000+10;const int maxm= 1000000+10;int pos[maxn];int cnt[maxm];int a原创 2017-11-01 16:41:12 · 310 阅读 · 0 评论 -
Yandex.Algorithm 2011 Round 2 D - Powerful array (莫队算法)
题意:给你n个数,进行m个查询,每个查询有一个区间,如果1出现了cnt[1]次,2出现了cnt[2]次,3出现了cnt[3]次…..i出现cnt[i]次,那么就要求输出1∗cnt[1]2+2∗cnt[2]2+3∗cnt[3]2+...+i∗cnt[i]21*cnt[1]^2+2*cnt[2]^2+3*cnt[3]^2+...+i*cnt[i]^2思路:莫队裸题,用cnt记录下某个数字出现,这样就能o原创 2017-10-30 17:09:33 · 274 阅读 · 0 评论 -
Codeforces Round #442 (Div. 2) F. Ann and Books (莫队算法+离散化)
题意:给你一n个数字,其中有的是第一类,有的是第二类,接着是m个查询,问你某个区间内,连续的子区间的第一类的和减去第二类的和恰好为k的子区间一共多少个。思路:莫队算法及离散化。这个题不是一般的毒,卡logn。 首先对于这个题目,只查询不修改,很容易想到莫队算法。首先处理出前缀和,那么我val[i]-val[j]就能表示aj+1+aj+2+...+ai{a_{j+1}+{a_{j+2}+...+{a原创 2017-10-28 23:15:45 · 312 阅读 · 0 评论 -
Codeforces Round #340 (Div. 2) E - XOR and Favorite Number (莫队算法)
题意:给你n个数,m个查询,每个查询问你一个区间里面,连续的数的异或值恰好为k的区间有多少个思路:莫队算法 如果我处理出前缀的异或,那么我ai^aj(i>j)的值,就是 aj+1{a_{j+1}} ^aj+1{a_{j+1}}^aj+3...aia_{j+3}...a_{i}的值。当我修改区间的时间,多一个值aia_{i},那么就相当于之前区间的答案加上cnt[k^aia_{i}],其他的也相似,原创 2017-10-28 19:48:44 · 252 阅读 · 0 评论 -
CodeChef VLB Vasya and Little Bear (树上莫队)
#include&amp;lt;bits/stdc++.h&amp;gt;using namespace std;const int N = 100100;stack&amp;lt;int&amp;gt; s; //分块时需要int blocks,nowblo;//块大小,当前处于哪个块int n,m;//节点数,问题数int to[N][20],depth[N];//LCAint block[N];long ...原创 2018-09-16 00:24:23 · 267 阅读 · 0 评论