题意:给定\(a[1...n]\)和\(Q\)次询问,每次统计\([L,R]\)范围内出现频率最高的数的次数

想法没啥好说的,分别统计该数出现的次数和次数出现的次数,然后莫队暴力

注意本题时间卡的很紧,map无法通过

还有一个小细节是莫队时必须把add操作全部放在前面,保证操作不会数据越界,否则会RTE(你想想为什么?)

细节太重要了

  1. #include<iostream>
  2. #include<algorithm>
  3. #include<cstdio>
  4. #include<cstring>
  5. #include<cstdlib>
  6. #include<cmath>
  7. #include<string>
  8. #include<vector>
  9. #include<stack>
  10. #include<queue>
  11. #include<set>
  12. #include<map>
  13. #include<bitset>
  14. #define rep(i,j,k) for(register int i=j;i<=k;i++)
  15. #define rrep(i,j,k) for(register int i=j;i>=k;i--)
  16. #define erep(i,u) for(register int i=head[u];~i;i=nxt[i])
  17. #define print(a) printf("%lld",(ll)a)
  18. #define println(a) printf("%lld\n",(ll)a)
  19. using namespace std;
  20. const int MAXN = 1e5+11;
  21. typedef long long ll;
  22. ll read(){
  23. ll x=0,f=1;register char ch=getchar();
  24. while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}
  25. while(ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();}
  26. return x*f;
  27. }
  28. struct Node{
  29. int l,r,id;
  30. }Q[MAXN];
  31. int a[MAXN],pos[MAXN],ans[MAXN];
  32. int cntVal[MAXN],cntNum[MAXN];//统计该值出现的次数 / 该次数出现的次数
  33. int L,R,ANS,SIZE,n,m,k;
  34. bool cmp(Node a,Node b){
  35. if(pos[a.l]!=pos[b.l]) return pos[a.l]<pos[b.l];
  36. return a.r<b.r;
  37. }
  38. inline void add(int cur){
  39. int f=cntVal[a[cur]];
  40. if(f==ANS) ANS++;
  41. cntVal[a[cur]]++;
  42. cntNum[f]--;
  43. cntNum[f+1]++;
  44. }
  45. inline void del(int cur){
  46. int f=cntVal[a[cur]];
  47. if(f==ANS&&cntNum[f]==1) ANS--;
  48. cntVal[a[cur]]--;
  49. cntNum[f]--;
  50. cntNum[f-1]++;
  51. }
  52. int main(){
  53. while(~scanf("%d%d",&n,&m)){
  54. memset(cntNum,0,sizeof cntNum);
  55. memset(cntVal,0,sizeof cntVal);
  56. SIZE=sqrt(n);
  57. rep(i,1,n){
  58. a[i]=read();
  59. pos[i]=i/SIZE;
  60. }
  61. rep(i,1,m){
  62. Q[i].l=read()+1;
  63. Q[i].r=read()+1;
  64. Q[i].id=i;
  65. if(Q[i].l>Q[i].r) swap(Q[i].l,Q[i].r);
  66. }
  67. sort(Q+1,Q+1+m,cmp);
  68. cntNum[0]=n;
  69. L=1; R=0; ANS=0;
  70. rep(i,1,m){ //注意顺序!否则RTE!
  71. while(L>Q[i].l){
  72. L--;
  73. add(L);
  74. }
  75. while(R<Q[i].r){
  76. R++;
  77. add(R);
  78. }
  79. while(L<Q[i].l){
  80. del(L);
  81. L++;
  82. }
  83. while(R>Q[i].r){
  84. del(R);
  85. R--;
  86. }
  87. ans[Q[i].id]=ANS;
  88. }
  89. rep(i,1,m) println(ans[i]);
  90. }
  91. return 0;
  92. }

SPOJ - FREQ2 莫队 / n^1.5logn爆炸的更多相关文章

  1. SPOJ - DQUERY 莫队

    题意:给定\(a[1...n]\),\(Q\)次询问,每次统计\([L,R]\)范围内有多少个不同的数字 xjb乱写就A了,莫队真好玩 #include<iostream> #includ ...

  2. 【SPOJ】Count On A Tree II(树上莫队)

    [SPOJ]Count On A Tree II(树上莫队) 题面 洛谷 Vjudge 洛谷上有翻译啦 题解 如果不在树上就是一个很裸很裸的莫队 现在在树上,就是一个很裸很裸的树上莫队啦. #incl ...

  3. SPOJ D-query(莫队算法模板)

    题目链接:http://www.spoj.com/problems/DQUERY/ 题目大意:给定一个数组,每次询问一个区间内的不同元素的个数 解题思路:直接套莫队的裸题 #include<cs ...

  4. SPOJ COT2 - Count on a tree II(LCA+离散化+树上莫队)

    COT2 - Count on a tree II #tree You are given a tree with N nodes. The tree nodes are numbered from  ...

  5. spoj COT2 - Count on a tree II 树上莫队

    题目链接 http://codeforces.com/blog/entry/43230树上莫队从这里学的,  受益匪浅.. #include <iostream> #include < ...

  6. spoj COT2(树上莫队)

    模板.树上莫队的分块就是按dfn分,然后区间之间转移时注意一下就好.有个图方便理解http://blog.csdn.net/thy_asdf/article/details/47377709: #in ...

  7. SPOJ DQUERY - D-query (莫队算法|主席树|离线树状数组)

    DQUERY - D-query Given a sequence of n numbers a1, a2, ..., an and a number of d-queries. A d-query ...

  8. 「日常训练&知识学习」莫队算法(二):树上莫队(Count on a tree II,SPOJ COT2)

    题意与分析 题意是这样的,给定一颗节点有权值的树,然后给若干个询问,每次询问让你找出一条链上有多少个不同权值. 写这题之前要参看我的三个blog:Codeforces Round #326 Div. ...

  9. (原创)D-query SPOJ - DQUERY(莫队)统计不同数的数量

    A - D-query Given a sequence of n numbers a1, a2, ..., an and a number of d-queries. A d-query is a ...

随机推荐

  1. SqlServer try catch 捕获不到的一些错误及解决方法

    IF (OBJECT_ID('AA','U') IS NOT NULL) DROP TABLE AA CREATE TABLE AA(ID INT) SELECT * FROM AA --注:数据库当 ...

  2. Process management of windows

    igfxem.exe进程是正常的进程.是intel家的核显驱动类的进程.核显即"核芯显卡",是指GPU部分它是与CPU建立在同一内核芯片上,两者完全融合的芯片."核芯显卡 ...

  3. weblogic参数说明

    公司有个项目,部署在weblogic8.1上之后,发现比在tomcat下慢很多,经过分析排查,原因是web应用的WEB-INF下的weblogic.xml里的参数设置不合理(使用默认值有时并非最佳值) ...

  4. CopyOnWriteArrayList原理

    http://blog.csdn.net/chayangdz/article/details/76347465 总结的很到位: http://www.cnblogs.com/java-zhao/p/5 ...

  5. 用maven将项目安装到本地仓库,为什么老是在默认仓库地址(C:\Users\userName\.m2\repository)

    使用mvn clean install安装项目到本地的时候,在idea中配置好了本地仓库地址,见下图: 但是安装时,还是安装到了C:\Users\userName\.m2\repository路径下, ...

  6. asp.netcore+jenkins+docker+svn+centos7.2 持续集成,每天凌晨获取最新代码打包发布

    运行环境: centos7.2服务器或则虚拟机 可以是腾讯云也可以是内网服务器,(如果是内网服务器需要用frp做内网穿透,这样才可以通过外网访问该服务器) svnserver 来托管代码 一.安装je ...

  7. const限定符、constexpr和常量表达式------c++ primer

    编译器将在编译过程中把用到const变量的地方都替换成对应的值,为了执行这种替换,编译器必须知道变量的初始值.如果程序包含多个文件,则那个用了const对象的文件都必须能访问到它的初始值才行.要做到这 ...

  8. C# 密封(2)

    上一章节说到 sealed  作用于类,那么sealed 作用到方法和成员上面该如何呢. 在C# 中 Sealed作用于方法必须是重写之后的方法.也就是override+sealed.在之后别的类在继 ...

  9. Windows10电脑系统时间校准

    有时候新安装电脑系统,系统时间不对,需要主动去校准系统时间. 1.点击时间 2.日期和时间设置 3.其他日期.时间和区域设置 4.设置时间和日期 5.Internet 时间 6.点击立即更新,如果更新 ...

  10. 洛谷P4502 [ZJOI2018]保镖(计算几何+三维凸包)

    题面 传送门 题解 我对计蒜几盒一无所知 顺便\(xzy\)巨巨好强 前置芝士 三维凸包 啥?你不会三维凸包?快去把板子写了->这里 欧拉公式 \[V-E+F=2\] \(V:vertex\)顶 ...