bzoj 3920: Yuuna的礼物
Description
Input
Output
很显然可以用莫队算法,关键在于维护状态转移。权值分块可以做到O(1)插入/删除,O(√(n))查询第k大,可以用于维护每种出现次数有几个权值以及相同出现次数的不同权值。由均摊分析可知,每种出现次数的权值数之和为n,于是可以预处理离散化并给每个出现次数的权值分块分配对应的空间。可以做到O(n)预处理,O(m√(n))查询,O(n)空间,但常数较大。
#include<cstdio>
#include<algorithm>
#include<cmath>
int _(){
int x=,c=getchar();
while(c<)c=getchar();
while(c>)x=x*+c-,c=getchar();
return x;
}
int n,m,v[],B,id[],ts[],ans[],t1[],t2[],mt[],mc[];
int*l0[],*r0[],*l1[],*l2[],*l3[],_mem[],*mp=_mem;
struct Q{
int l,r,k1,k2,ID;
void init(int i){
l=_();r=_();k1=_();k2=_();ID=i;
}
bool operator<(const Q&w)const{
return id[l]!=id[w.l]?id[l]<id[w.l]:r!=w.r?(r<w.r)!=(id[l]&):ID<w.ID;
}
}q[];
void insv(int x,int y){
if(!t1[x]++)++t2[x/B];
y=l3[y][x];
++l1[x][y];
++l2[x][y/B];
}
void delv(int x,int y){
if(!--t1[x])--t2[x/B];
y=l3[y][x];
--l1[x][y];
--l2[x][y/B];
}
void ins(int x){
if(ts[x]>)delv(ts[x],x);
++ts[x];
if(ts[x]>)insv(ts[x],x);
}
void del(int x){
if(ts[x]>)delv(ts[x],x);
--ts[x];
if(ts[x]>)insv(ts[x],x);
}
int rnk(int x,int k){
for(int i=,s=;;++i){
if(s+l2[x][i]>=k){
for(int j=i*B;;++j)if((s+=l1[x][j])==k)return l0[x][j];
}
s+=l2[x][i];
}
}
int main(){
n=_();
B=sqrt(n+)+;
for(int i=;i<=n;++i)++mc[++mt[v[i]=_()]],id[i]=(i-)/B;
for(int i=;i<=n;++i){
l0[i]=r0[i]=mp;mp+=mc[i];
l1[i]=mp;mp+=mc[i];
l2[i]=mp;mp+=mc[i];
l3[i]=mp-;mp+=mt[i];
}
for(int i=;i<=n;++i)for(int j=;j<=mt[i];++j)l3[i][j]=r0[j]-l0[j],*r0[j]++=i;
m=_();
for(int i=;i<m;++i)q[i].init(i);
std::sort(q,q+m);
int L=,R=;
for(int i=;i<m;++i){
int l=q[i].l,r=q[i].r;
while(L>l)ins(v[--L]);
while(L<l)del(v[L++]);
while(R<r)ins(v[++R]);
while(R>r)del(v[R--]);
for(int j=,s=;;++j){
if(s+t2[j]>=q[i].k1){
int k=B*j;
while(s<q[i].k1)if(t1[k++])++s;--k;
ans[q[i].ID]=rnk(k,q[i].k2);
break;
}
s+=t2[j];
}
}
for(int i=;i<m;++i)printf("%d\n",ans[i]);
return ;
}
bzoj 3920: Yuuna的礼物的更多相关文章
- BZOJ.3920.Yuuna的礼物(莫队 分块套分块 分段离散化)
题目链接 详细题解:https://www.cnblogs.com/autsky-jadek/p/4376091.html 代码参考自:https://www.cnblogs.com/Sakits/p ...
- bzoj3920: Yuuna的礼物(莫队+分块套分块)
思路挺简单的,但是总感觉好难写...码力还是差劲,最后写出来也挺丑的 这题显然是个莫队题,考虑怎么转移和询问... 根据莫队修改多查询少的特点,一般用修改快查询慢的分块来维护.查第$k_1$小的出现次 ...
- 【莫队算法】【权值分块】bzoj3920 Yuuna的礼物
[算法一] 暴力. 可以通过第0.1号测试点. 预计得分:20分. [算法二] 经典问题:区间众数,数据范围也不是很大,因此我们可以: ①分块,离散化,预处理出: <1>前i块中x出现的次 ...
- [BZOJ3920]Yuuna的礼物
题目大意: 给你一个长度为$n(n\le40000)$的数列$\{a_i\}(1\le a_i\le n)$,给出$m(m\le40000)$次询问,每次给出$l,r,k_1,k_2$询问区间$[l, ...
- bzoj AC倒序
Search GO 说明:输入题号直接进入相应题目,如需搜索含数字的题目,请在关键词前加单引号 Problem ID Title Source AC Submit Y 1000 A+B Problem ...
- bzoj 3055礼物运送 floyed + 状压DP
bzoj 3055: 礼物运送 floyed first 设f[i][S]表示取到了S集合中的所有点(不一定是经过的所有点),最后停在了i的最优值. 初始就f[i][{i}] = dis[1][i] ...
- bzoj 4827 礼物
bzoj 4827 礼物 可以看做将其中一个数列(假定为 \(a\) )都加上 \(c\) , \(c\) 可以为负数.易知这里 \(-m\leq c\leq m\). 记要求的答案为 \(ans\) ...
- BZOJ 3438 小M的礼物
BZOJ 3438 小M的礼物 Description 小M在MC里开辟了两块巨大的耕地A和B(你可以认为容量是无穷),现在,小P有n中作物的种子,每种作物的种子 有1个(就是可以种一棵作物)(用1. ...
- bzoj 4827: [Hnoi2017]礼物 [fft]
4827: [Hnoi2017]礼物 题意:略 以前做的了 化一化式子就是一个卷积和一些常数项 我记着确定调整值还要求一下导... #include <iostream> #include ...
随机推荐
- mysql-server 的一些记录
为避免 innodb 文件的增大.个人倾向于读立表空间.以 innodb_file_per_table=1 参数调整. 不使用默认数据目录的话,须得将 grp own 都循环设置为mysql. 昨天晚 ...
- 2016 ACM/ICPC Asia Regional Shenyang Online 1003/HDU 5894 数学/组合数/逆元
hannnnah_j’s Biological Test Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 131072/131072 K ...
- VGA DVI HDMI区别
VGA,DVI,HDMI是目前常用的3种不同显示接口的名称.在树莓派的边缘既有HDMI的接口,也有RCA的接口,而显示器上也是既有DVI,又有VGA.上个月买连接线,没有仔细检查买了一根HDMI对VG ...
- Hibernate--Enum类型的set集合映射到数据库(xml配置文件实现方式)
使用enum 存储Permission的值 package demo; public enum Permission { CREATE,DELETE,UPDATE;} Role与Permissi ...
- timus 1109 Conference(二分图匹配)
Conference Time limit: 0.5 secondMemory limit: 64 MB On the upcoming conference were sent M represen ...
- HDU-5532 Almost Sorted Array (LIS)
题目大意:给一个n个数的序列,问这个序列删掉一个数后是否有序. 题目分析:找最长上升子序列和最长下降子序列,只要有一个的长度不小于n-1即可. 代码如下: # include<iostream& ...
- iOS应用日志:开始编写日志组件与异常日志
应用日志(一):开始编写日志组件 对于那些做后端开发的工程师来说,看 LOG解Bug应该是理所当然的事,但我接触到的移动应用开发的工程师里面,很多人并没有这个意识,查Bug时总是一遍一遍的试图重现,试 ...
- poj3159 最短路(差分约束)
题意:现在需要分糖果,有n个人,现在有些人觉得某个人的糖果数不能比自己多多少个,然后问n最多能在让所有人都满意的情况下比1多多少个. 这道题其实就是差分约束题目,根据题中给出的 a 认为 b 不能比 ...
- Linux常用配置文件解析
网络相关配置文件 1./etc/sysconfig/network-scripts/ifcfg-ethx 网络参数IP/子网掩码/广播地址等的配置(重启有效) 2./etc/resolv.conf ...
- Linux定时任务Crontab执行PHP脚本
http://blog.chinaunix.net/uid-7552018-id-182133.html crontab执行php脚本 http://www.jb51.net/article/2913 ...