如题。

  1. #include<cstdio>
  2. #include<algorithm>
  3. #include<cmath>
  4. using namespace std;
  5. #define N 200001
  6. #define BN 451
  7. int n,m,a[N],b[N],sumv[BN],l[N],num[N],num2[N],Lim,siz[BN],anss[N];
  8. struct Ask{int l,r,p;void Read(){scanf("%d%d",&l,&r);}}Q[N];
  9. bool operator < (const Ask &a,const Ask &b)
  10. {return num2[a.l]!=num2[b.l] ? num2[a.l]<num2[b.l] : a.r<b.r;}
  11. void val_mb()
  12. {
  13. int sum=1,sz=sqrt(Lim);
  14. if(!sz) sz=1;
  15. for(;sum*sz<Lim;++sum)
  16. {
  17. l[sum]=(sum-1)*sz;
  18. int r=l[sum]+sz-1;
  19. for(int i=l[sum];i<=r;++i) num[i]=sum;
  20. siz[sum]=sz;
  21. }
  22. l[sum]=(sum-1)*sz;
  23. for(int i=l[sum];i<=Lim;++i) num[i]=sum;
  24. siz[sum]=Lim-l[sum]+1;
  25. }
  26. void mo_mb()
  27. {
  28. int sum=1,sz=sqrt(n);
  29. if(!sz) sz=1;
  30. for(;sum*sz<n;++sum)
  31. {
  32. int i=(sum-1)*sz+1,r=i+sz;
  33. for(;i<=r;++i) num2[i]=sum;
  34. }
  35. int i=(sum-1)*sz+1;
  36. for(;i<=n;++i) num2[i]=sum;
  37. }
  38. void Insert(const int &x){if(!b[x]) ++sumv[num[x]]; ++b[x];}
  39. void Delete(const int &x){--b[x]; if(!b[x]) --sumv[num[x]];}
  40. int Query(){for(int i=1;;++i) if(sumv[i]!=siz[i]) for(int j=l[i];;++j) if(!b[j]) return j;}
  41. int main()
  42. {
  43. scanf("%d%d",&n,&m);
  44. for(int i=1;i<=n;++i) scanf("%d",&a[i]);
  45. Lim=*max_element(a+1,a+n+1);
  46. val_mb(); mo_mb();
  47. for(int i=1;i<=m;++i) Q[i].Read(),Q[i].p=i;
  48. sort(Q+1,Q+m+1);
  49. for(int i=Q[1].l;i<=Q[1].r;++i) Insert(a[i]);
  50. anss[Q[1].p]=Query();
  51. for(int i=2;i<=m;++i)
  52. {
  53. if(Q[i].l<Q[i-1].l) for(int j=Q[i-1].l-1;j>=Q[i].l;--j) Insert(a[j]);
  54. else for(int j=Q[i-1].l;j<Q[i].l;++j) Delete(a[j]);
  55. if(Q[i].r<Q[i-1].r) for(int j=Q[i-1].r;j>Q[i].r;--j) Delete(a[j]);
  56. else for(int j=Q[i-1].r+1;j<=Q[i].r;++j) Insert(a[j]);
  57. anss[Q[i].p]=Query();
  58. }
  59. for(int i=1;i<=m;++i) printf("%d\n",anss[i]);
  60. return 0;
  61. }

【莫队算法】【权值分块】bzoj3339 Rmq Problem的更多相关文章

  1. BZOJ2038: [2009国家集训队]小Z的袜子(hose) -- 莫队算法 ,,分块

    2038: [2009国家集训队]小Z的袜子(hose) Time Limit: 20 Sec  Memory Limit: 259 MBSubmit: 3577  Solved: 1652[Subm ...

  2. 莫队算法 sqrt(n)分块思想

    在此说一下本渣对莫队算法思想的一些浅薄理解 莫队算法的思想就是对真个区间的分块,然后按照每块来分别进行计算,这样最终的复杂度可以达到n*sqrt(n) 小Z的袜子是一道非常经典的题目.:题目链接htt ...

  3. Luogu 1494 - 小Z的袜子 - [莫队算法模板题][分块]

    题目链接:https://www.luogu.org/problemnew/show/P1494 题目描述 作为一个生活散漫的人,小Z每天早上都要耗费很久从一堆五颜六色的袜子中找出一双来穿.终于有一天 ...

  4. 莫队或权值线段树 或主席树 p4137

    题目描述 有一个长度为n的数组{a1,a2,…,an}.m次询问,每次询问一个区间内最小没有出现过的自然数. 输入格式 第一行n,m. 第二行为n个数. 从第三行开始,每行一个询问l,r. 输出格式 ...

  5. 【BZOJ】4358: permu 莫队算法

    [题意]给定长度为n的排列,m次询问区间[L,R]的最长连续值域.n<=50000. [算法]莫队算法 [题解]考虑莫队维护增加一个数的信息:设up[x]表示数值x往上延伸的最大长度,down[ ...

  6. 【莫队算法】【权值分块】bzoj3920 Yuuna的礼物

    [算法一] 暴力. 可以通过第0.1号测试点. 预计得分:20分. [算法二] 经典问题:区间众数,数据范围也不是很大,因此我们可以: ①分块,离散化,预处理出: <1>前i块中x出现的次 ...

  7. 【莫队算法】【权值分块】poj2104 K-th Number / poj2761 Feed the dogs

    先用莫队算法保证在询问之间转移的复杂度,每次转移都需要进行O(sqrt(m))次插入和删除,权值分块的插入/删除是O(1)的. 然后询问的时候用权值分块查询区间k小值,每次是O(sqrt(n))的. ...

  8. 【bzoj3585/bzoj3339】mex/Rmq Problem 莫队算法+分块

    原文地址:http://www.cnblogs.com/GXZlegend/p/6805283.html 题目描述 有一个长度为n的数组{a1,a2,...,an}.m次询问,每次询问一个区间内最小没 ...

  9. 【莫队算法】【权值分块】bzoj2223 [Coci 2009]PATULJCI

    不带修改主席树裸题<=>莫队+权值分块裸题. 复杂度O(m*sqrt(n)). P.S.题目描述坑爹,第二个数是权值的范围. #include<cstdio> #include ...

  10. 【DFS序】【莫队算法】【权值分块】bzoj2809 [Apio2012]dispatching

    题意:在树中找到一个点i,并且找到这个点子树中的一些点组成一个集合,使得集合中的所有点的c之和不超过M,且Li*集合中元素个数和最大 首先,我们将树处理出dfs序,将子树询问转化成区间询问. 然后我们 ...

随机推荐

  1. Educational Codeforces Round 58 (Rated for Div. 2) 题解

    Educational Codeforces Round 58 (Rated for Div. 2)  题目总链接:https://codeforces.com/contest/1101 A. Min ...

  2. 怎么给word加底纹

  3. Django请求原理

    总结一下: 1. 进来的请求转入/hello/. 2. Django通过在ROOT_URLCONF配置来决定根URLconf. 3. Django在URLconf中的所有URL模式中,查找第一个匹配/ ...

  4. 迅雷Bolt的ClipSubBindBitmap函数特别说明

    因为在工作中基于迅雷Bolt开发的是IM产品,需要实现自定义用户头像的功能. 但Bolt中对图像的默认拉伸锯齿效果非常明显,所以自己实现了图像拉伸函数,代码已共享,具体可查看:<迅雷Bolt图像 ...

  5. 在Maven中怎么配置外部Jar

    转摘自:http://liugang594.iteye.com/blog/1677712 假设我们有一个Maven的project,其中有些Jar包不是来自Maven库的,是存在本地的某些Jar文件, ...

  6. windows 系统下git 的使用

    前言: 最新版本的git for windows也是有界面的,不再是以前的纯命令行操作,但是我习惯了乌龟,所以感觉还是直接用乌龟比较方便点~~ 前提,已安装以下: git for windows,未安 ...

  7. a标签的download属性简介

    最近在工作中需要一个前端直接下载静态文件的需求,之前有粗略的了解过a标签的download属性,通过download和href属性可以实现文件的下载. 简介 HTML <a> 元素 (或锚 ...

  8. linux基础-临时和永久修改ip地址以及通配符相关

    一.临时配置网络(ip,网关,dns) 修改临时ip地址: 1.ifconfig查看当前的网卡和ip地址 2.临时修改IP地址:ifconfig ens32 192.168.16.200/24,ifc ...

  9. Kuangbin 带你飞-基础计算几何专题 题解

    专题基本全都是模版应用.贴一下模版 平面最近点对 const double INF = 1e16; ; struct Point { int x,y; int type; }; double dist ...

  10. sprintf,snprintf的用法(可以作为linux中itoa函数的补充)【转】

    转自:http://blog.csdn.net/educast/article/details/25068445 函数功能:把格式化的数据写入某个字符串 头文件:stdio.h 函数原型:int sp ...