![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
莫队
Love_xyh
这个作者很懒,什么都没留下…
展开
-
洛谷 P4137 Rmq Problem / mex
洛谷加强数据以后,无论是怎样改变块的大小或是用奇偶块排序,都不能过。所以这里介绍一下值域分块。在这里我们可以直接利用奇偶块排序时分的块。在add或del改变cnt值的同时,改变相应块的权值即可。最后的查询就能变为sqrt(n)。#include <bits/stdc++.h>using namespace std;const int N=2e5+5,M=500;int n,m,t,nowl,nowr,block;int a[N],b[N],cnt[N],ans[N],id[N]原创 2020-07-27 19:38:05 · 137 阅读 · 1 评论 -
[CQOI2018]异或序列
不断求区间问题,且问题挺复杂,那就用莫队没错了(反正也不会线段树…)a[l] ^ a[l+1] ^ …^a[r]=sum[l-1] ^ sum[r](记sum[i]为a[1]-a[i]的异或和)现在我们想得到sum[l-1] ^ sum[r]=k的个数,再来改变一下:sum[l-1] ^ k=sum[r]然后我们可以模拟一下:假装现在已经有一段初始区间是存在的了,并且初始区间的个数和已经被求出(这个应该O(n)都会的),那么对于一段新的区间,应该怎么修改呢?1.假设新区间包含初始区间:那么我们的l要原创 2020-07-26 09:22:32 · 120 阅读 · 0 评论 -
洛谷 P1997 faebdc 的烦恼
一般思路是权值线段树或者莫队来做。这里选择莫队来做。(因为我菜呐,如果是比赛的时候,只能写个暴力尽可能多拿分了)题解区看到权值线段树因为没考虑清楚被卡掉2-3个点不等,心里挺happy的,这样我们写莫队这个简单的暴力算法就由不亏到赚翻了。需要求区间出现次数最多数出现的次数,那么我们对于每个不同的数,首先记录一个cnt,cnt[x]表示x目前出现的次数;然后对于每个不同的次数,再记录一个sum,sum[x]表示出现x次的数有几个。那么,在add和del中,都是先把当前次数的sum[cnt[a[x]]]原创 2020-07-26 08:13:51 · 107 阅读 · 0 评论