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

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

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

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

细节太重要了

#include<iostream>
#include<algorithm>
#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<cmath>
#include<string>
#include<vector>
#include<stack>
#include<queue>
#include<set>
#include<map>
#include<bitset>
#define rep(i,j,k) for(register int i=j;i<=k;i++)
#define rrep(i,j,k) for(register int i=j;i>=k;i--)
#define erep(i,u) for(register int i=head[u];~i;i=nxt[i])
#define print(a) printf("%lld",(ll)a)
#define println(a) printf("%lld\n",(ll)a)
using namespace std;
const int MAXN = 1e5+11;
typedef long long ll;
ll read(){
ll x=0,f=1;register char ch=getchar();
while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}
while(ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();}
return x*f;
}
struct Node{
int l,r,id;
}Q[MAXN];
int a[MAXN],pos[MAXN],ans[MAXN];
int cntVal[MAXN],cntNum[MAXN];//统计该值出现的次数 / 该次数出现的次数
int L,R,ANS,SIZE,n,m,k;
bool cmp(Node a,Node b){
if(pos[a.l]!=pos[b.l]) return pos[a.l]<pos[b.l];
return a.r<b.r;
}
inline void add(int cur){
int f=cntVal[a[cur]];
if(f==ANS) ANS++;
cntVal[a[cur]]++;
cntNum[f]--;
cntNum[f+1]++;
}
inline void del(int cur){
int f=cntVal[a[cur]];
if(f==ANS&&cntNum[f]==1) ANS--;
cntVal[a[cur]]--;
cntNum[f]--;
cntNum[f-1]++;
}
int main(){
while(~scanf("%d%d",&n,&m)){
memset(cntNum,0,sizeof cntNum);
memset(cntVal,0,sizeof cntVal);
SIZE=sqrt(n);
rep(i,1,n){
a[i]=read();
pos[i]=i/SIZE;
}
rep(i,1,m){
Q[i].l=read()+1;
Q[i].r=read()+1;
Q[i].id=i;
if(Q[i].l>Q[i].r) swap(Q[i].l,Q[i].r);
}
sort(Q+1,Q+1+m,cmp);
cntNum[0]=n;
L=1; R=0; ANS=0;
rep(i,1,m){ //注意顺序!否则RTE!
while(L>Q[i].l){
L--;
add(L);
}
while(R<Q[i].r){
R++;
add(R);
}
while(L<Q[i].l){
del(L);
L++;
}
while(R>Q[i].r){
del(R);
R--;
}
ans[Q[i].id]=ANS;
}
rep(i,1,m) println(ans[i]);
}
return 0;
}

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. 434. Number of Segments in a String 字符串中的单词个数

    [抄题]: Count the number of segments in a string, where a segment is defined to be a contiguous sequen ...

  2. 16-math_M_PI

    头文件math.h中宏定义的是M_PI#define M_PI 3.14159265358979323846所以不需要记忆PI的值了可以直接用

  3. Ubuntu下libpcap安装步骤

    第一步,先安装GCC ,一般都会自动安装 sudo apt-get install build-essential 第二步,GNU M4可以从此处ftp.gnu.org/gnu/m4/ 下载 sudo ...

  4. Bean管理注解的例子

  5. 使用jQuery完成表单验证

    <!DOCTYPE html><html> <head> <meta charset="UTF-8"> <title>注 ...

  6. Visual Studio OpenCV 开发环境配置

    因为VS配置OpenCV好多新手都很难一次配置成功,而且OpenCV库每新建一个项目都要配置很是麻烦,所以今天就给大家介绍一个“一劳永逸”的方法. 注:理论上只要VS和OpenCV是版本兼容的,该方法 ...

  7. iOS play video

    iOS: How to use MPMoviePlayerController up vote6down votefavorite 3 I've created a blank project (iO ...

  8. vs2012 许可 tfs 许可

    Team Foundation Server 2012序列号或MSDN版本 BVGTF-T7MVR-TP46H-9Q97G-XBXRB VS2012注册码 亲测成功.我的是旗舰版... YKCW6-B ...

  9. 关于Html5中的单选与多选

    1.下拉列表样式: <select> <option value ="volvo">Volvo</option> <option valu ...

  10. 21天学通C++学习笔记(一):入门

    1. 基础概念 1.1 编程语言 旨在让人更容易得使用计算资源,充分利用电脑,不用人做一些重复劳动或持续参与. 1.2 可执行文件 是可运行的成品,应按程序员希望的那样做. 1.3 生成可执行文件的步 ...