bzoj 2038 莫队入门】的更多相关文章

http://www.lydsy.com/JudgeOnline/problem.php?id=2038 题意:多次询问区间内取出两个相同颜色的种类数 思路:由于不是在线更新,那么可以进行离线查询,而且当知道了[l,r]的答案,且能在O(1)的条件下得知[l-1,r],[l+1,r],[l,r+1],[l,r-1]的答案,那么就能使用莫队算法了. 大致上,将区间分块,由于n=a+b>=a*b,显然将区间开平方根是最优的,我们先将询问保存,按照块序第一优先,再考虑右端点进行排序.再来,使用cnt[…
莫队算法,具体的可以看10年莫涛的论文. 大题思路就是假设对于区间l,r我们有了一个答案,那么对于区间l,r+1,我们 可以暴力的转移一个答案,那么对于区间l1,r1和区间l2,r2,需要暴力处理 的部分就是|r1-r2|+|l1-l2|如果将l看成x,r看成r,得到的暴力部分就是manhattan距离 那么我们将所有的询问,构成一张二维图,可以从一个点转移到另一个点,且总manhattan距离 尽可能的小,所以可以建立一颗manhattan mst,这样的话就可以得到最优的转移,但是实际来说…
题目链接  https://www.lydsy.com/JudgeOnline/problem.php?id=2038 参考博客 https://www.cnblogs.com/Paul-Guderian/p/6933799.html   https://www.cnblogs.com/hzf-sbit/p/4056874.html 解析  C(2,n)=n*(n-1)/2=(n*n-n)/2   分子就是∑C(sum[i],2) ( i 是区间内的颜色  sum[i] 是区间内i颜色的数量)公…
题目链接:https://www.lydsy.com/JudgeOnline/problem.php?id=2038 题目: 题意:中文题意,大家都懂. 思路:莫队入门题.不过由于要去概率,所以我们假设询问区间内有k中物品,每种物品我们假设它的数量为pi.那么我们可以进行下面一系列的公式推导: 所以我们用莫队维护该区间内某颜色的平方和,对于最简分式我们用一个gcd即可求出. 代码实现如下: #include <set> #include <map> #include <que…
题目链接:https://www.luogu.org/problemnew/show/P2709 题目大意:中文题目 具体思路:莫队入门题,按照离线的方式打的,对每一个区间进行分块和编号,如果在同一个块里面就按照右端点从小到大排列,如果不在同一个块里面就按照块的下标开始排序,这里的块是按照数列分块里面的方法来进行的,查询每个区间的值就可以了. 对于l,r指针的移动,当l<q[i].l的时候,我们需要将l指针往右移动,所以假设t为当前的颜色,ans为未移动的时候的值,首先去除掉原来的值的影响,an…
I - 小Z的袜子(hose) 作为一个生活散漫的人,小Z每天早上都要耗费很久从一堆五颜六色的袜子中找出一双来穿.终于有一天,小Z再也无法忍受这恼人的找袜子过程,于是他决定听天由命…… 具体来说,小Z把这N只袜子从1到N编号,然后从编号L到R(L 尽管小Z并不在意两只袜子是不是完整的一双,甚至不在意两只袜子是否一左一右,他却很在意袜子的颜色,毕竟穿两只不同色的袜子会很尴尬. 你的任务便是告诉小Z,他有多大的概率抽到两只颜色相同的袜子.当然,小Z希望这个概率尽量高,所以他可能会询问多个(L,R)以…
题意: 给一段数字序列,求一段区间内未出现的最小自然数. SOL: 框架显然用莫队.因为它兹瓷离线. 然而在统计上我打了线段树...用&维护的结点...400w的线段树...然后二分查找...炸的妥妥的... 然后发现所谓的"暴力"...直接开数组维护...因为指针具有一定的单调性,一次更改可以直接得到解,不用每次都查询... woc真是...有时候数据结构用多了忽略了那些更简单更实用的方法... Code TLE的代码: /*=========================…
莫队维护逆序对,区间左右增减要分类讨论. 记得离散化. /************************************************************** Problem: 3289 User: idy002 Language: C++ Result: Accepted Time:5480 ms Memory:3164 kb ****************************************************************/ #inclu…
收获: 1.分块时顺便记录每个位置所属的块,然后一次排序就OK了. 2.要权衡在“区间移动”与“查询结果”之间的时间,莫队算法一般区间移动频率远大于查询结果,所以我们选择的辅助数据结构时就要注意了,我最开始写的是值域线段树,自己生成的极限数据要1m8s,改成树状数组后要24s,还是过不了,hzwer只要13s,细看hzwer的代码,发现Ta用的是分块,O(1)修改O(n0.5)查询,改成分块后的确快多了. 3.块的大小理论最优值是O(n*m-0.5),最开始设成这个交上去35卡过,改成hzwer…
题意: 求任意一个区间的SG函数. 想到线段树,但是线段树合并很麻烦. 线段树——分块. 分块的一个应用就是莫队算法. 怎么暴力递推呢? 从一个区间到另一个区间,Ans 取决于 Ans 和 加入和删除的这个数的大小比较.加入一个新数,可能导致Ans 变大,变到哪里去呢? 用一个cnt记录出现数值的个数. 变大到cnt=0的地方. 减去一个数,可能导致Ans 变小.这时就要看cnt 和 大小比较了. #include <bits/stdc++.h> using namespace std; *;…