题目链接 详细题解:https://www.cnblogs.com/autsky-jadek/p/4376091.html 代码参考自:https://www.cnblogs.com/Sakits/p/8445534.html 思路好理解,然而就是写了一下午+一晚上.. \(Description\) 给定一个长为n的序列,每次查询区间中出现次数k1小的数里面的k2小的数.卡空间. \(Solution\) 将出现次数按权值分块,这样可以实现\(O(1)\)插入,\(O(sqrt(n))\)查询…
思路挺简单的,但是总感觉好难写...码力还是差劲,最后写出来也挺丑的 这题显然是个莫队题,考虑怎么转移和询问... 根据莫队修改多查询少的特点,一般用修改快查询慢的分块来维护.查第$k_1$小的出现次数可以用权值分块做到$O(1)$修改,$O(\sqrt{n})$查询,$k_2$小的数同理.对于每一种出现次数$i$,预处理出有几种数在序列里的出现次数$\geq i$,并在每种出现次数中对这些数离散化,这样我们就能对每种出现次数进行权值分块查第$k_2$小的数了. 因为$\sum cnt_i=n$…
[算法一] 暴力. 可以通过第0.1号测试点. 预计得分:20分. [算法二] 经典问题:区间众数,数据范围也不是很大,因此我们可以: ①分块,离散化,预处理出: <1>前i块中x出现的次数(差分): <2>第i块到第j块中的众数是谁,出现了多少次. 询问的时候,对于整块的部分直接获得答案:对于零散的部分,暴力统计每个数出现 的次数,加上差分的结果,尝试更新ans. 时间复杂度O(m*sqrt(n)), 空间复杂度O(n*sqrt(n)). ②考虑离线,莫队算法,转移的时候使用数据…
传送门 题意:多组询问,问区间[l,r]中权值在[a,b]间的数的种类数. 看了一眼大家应该都知道要莫队了吧. 然后很容易想到用树状数组优化修改和查询做到O(mnlogamax)O(m\sqrt nlog_{a_{max}})O(mn​logamax​​)的时间复杂度. 然后发现可以上一波权值分块,这样的话可以平衡结合降低时间复杂度到O(mn+mamax)O(m\sqrt n+m\sqrt {a_{max}})O(mn​+mamax​​) 代码: #include<bits/stdc++.h>…
I - 小Z的袜子(hose) 作为一个生活散漫的人,小Z每天早上都要耗费很久从一堆五颜六色的袜子中找出一双来穿.终于有一天,小Z再也无法忍受这恼人的找袜子过程,于是他决定听天由命…… 具体来说,小Z把这N只袜子从1到N编号,然后从编号L到R(L 尽管小Z并不在意两只袜子是不是完整的一双,甚至不在意两只袜子是否一左一右,他却很在意袜子的颜色,毕竟穿两只不同色的袜子会很尴尬. 你的任务便是告诉小Z,他有多大的概率抽到两只颜色相同的袜子.当然,小Z希望这个概率尽量高,所以他可能会询问多个(L,R)以…
题目大意: 给你一个长度为$n(n\le40000)$的数列$\{a_i\}(1\le a_i\le n)$,给出$m(m\le40000)$次询问,每次给出$l,r,k_1,k_2$询问区间$[l,r]$中出现次数第$k_1$小的数中第$k_2$小的数是多少? 思路: 运用莫队算法离线处理所有询问,分块维护数列中每个数的出现次数.考虑如何维护出现次数的出现次数以及出现次数相同的数.同样采用分块,先预处理出对于某一种出现次数,所有可能的数,再将其离散化,对于离散化后的数分块维护.由于题目空间限制…
题意: 一个颜色序列,\(a_1, a_2, ...a_i\)表示第i个的颜色,给出每种颜色的美丽度\(w_i\),定义一段颜色的美丽值为该段颜色的美丽值之和(重复的只计算一次),每次都会修改某个位置的颜色或者查询l到r之间的美丽值. 分析: 带修改莫队:在所有询问中多记录一个时间,每次跳转询问前,处理当前时间(上一次操作所在的时间)到目的时间(本次询问所在时间)中的所有修改操作,如果时间是倒退的,就将值改回来,否则就更改值,并且如果修改的位置不在当前的莫队指针之间就直接修改,否则就先删除再添加…
传送门 题目大意应该都清楚. 今天看到一篇博客用分块+莫对做了这道题,直接惊呆了. 首先常规地离散化后将询问分块,对于某一询问,将莫队指针移动到指定区间,移动的同时处理权值分块的数字出现次数(单独.整块),莫队完后,现在的权值分块就是关于当前区间的.然后再从左到右扫描分块,直到数字个数+该块个数>=k,这时进入该块逐个加,当数字个数>=k时,直接跳出输出离散化之前的数字. 试了很多种块的大小,最后还是选择sqrt(100000) ≈ 320,时间比我的主席树还少(肯定是我写的丑). code…
显然若一个数大于n就不可能是答案. #include <iostream> #include <cstring> #include <cstdio> #include <algorithm> #include <map> #include <cmath> using namespace std; ; struct Info{int l,r,Id;}P[Maxn]; int a[Maxn],U[Maxn],Pos[Maxn],Belon…
题解都在论文里了 #include<bits/stdc++.h> using namespace std; #define maxn 10000005 #define ll long long #define mod 20101009 bool vis[maxn]; int sum[maxn],prime[maxn],mm,mu[maxn]; void primes(){ mu[]=; ;i<maxn;i++){ if(!vis[i]){ prime[++mm]=i; mu[i]=-;…