SPOJ - FREQ2 莫队 / n^1.5logn爆炸
题意:给定\(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爆炸的更多相关文章
- SPOJ - DQUERY 莫队
题意:给定\(a[1...n]\),\(Q\)次询问,每次统计\([L,R]\)范围内有多少个不同的数字 xjb乱写就A了,莫队真好玩 #include<iostream> #includ ...
- 【SPOJ】Count On A Tree II(树上莫队)
[SPOJ]Count On A Tree II(树上莫队) 题面 洛谷 Vjudge 洛谷上有翻译啦 题解 如果不在树上就是一个很裸很裸的莫队 现在在树上,就是一个很裸很裸的树上莫队啦. #incl ...
- SPOJ D-query(莫队算法模板)
题目链接:http://www.spoj.com/problems/DQUERY/ 题目大意:给定一个数组,每次询问一个区间内的不同元素的个数 解题思路:直接套莫队的裸题 #include<cs ...
- 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 ...
- spoj COT2 - Count on a tree II 树上莫队
题目链接 http://codeforces.com/blog/entry/43230树上莫队从这里学的, 受益匪浅.. #include <iostream> #include < ...
- spoj COT2(树上莫队)
模板.树上莫队的分块就是按dfn分,然后区间之间转移时注意一下就好.有个图方便理解http://blog.csdn.net/thy_asdf/article/details/47377709: #in ...
- 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 ...
- 「日常训练&知识学习」莫队算法(二):树上莫队(Count on a tree II,SPOJ COT2)
题意与分析 题意是这样的,给定一颗节点有权值的树,然后给若干个询问,每次询问让你找出一条链上有多少个不同权值. 写这题之前要参看我的三个blog:Codeforces Round #326 Div. ...
- (原创)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 ...
随机推荐
- Win10 pip安装pycocotools报错解决方法(cl: 命令行 error D8021 :无效的数值参数“/Wno-cpp”)
参考: https://blog.csdn.net/chixia1785/article/details/80040172 https://blog.csdn.net/gxiaoyaya/articl ...
- ROS naviagtion analysis: costmap_2d--LayeredCostmap
博客转自:https://blog.csdn.net/u013158492/article/details/50490490 在数据成员中,有两个重要的变量:Costmap2D costmap_和 s ...
- Apache ab命令
一.简介 ab是apache自带的压力测试工具.ab非常实用,它不仅可以对apache服务器进行网站访问压力测试,也可以对或其它类型的服务器进行压力测试.比如nginx.tomcat.IIS等. 二. ...
- 4.python 系统批量运维管理器之paramiko模块
paramiko paramiko是ssh服务最经常使用的模块,遵循SSH2协议,支持以加密和认证的方式,进行远程服务器的连接. paramiko实现ssh2不外乎两个角度:SSH客户端与服务端 SS ...
- Controlling Session Behavior in Asp.Net MVC4
Posted By : Shailendra Chauhan, 06 Jan 2013 Updated On : 11 Jun 2014 By default, Asp.Net MVC support ...
- FreeMarker的实例通俗理解
1.把包lib/freemarker.jar拷贝到项目中 2. 在WEB-INF下新建文件夹templates 在templates下新建test.ftl文件 内容为: <html> ...
- java中为什么要使用代理
引入代理: 我们为什么要引入java的代理,除了当前类能够提供的功能外,我们还需要补充一些其他功能. 最容易想到的情况就是权限过滤,我有一个类做某项业务,但是由于安全原因只有某些用户才可以调用这个类, ...
- 操作系统下spinlock锁解析、模拟及损耗分析
关于spinlock 我们在知道什么是spinlock之前,还需要知道为什么需要这个spinlock?spinlock本质就是锁,提到锁,我们就回到了多线程编程的混沌初期,为了实现多线程编程,操作系统 ...
- 关于bootstrap模态框的初始化事件
转:https://blog.csdn.net/u010181136/article/details/77579823
- linux chmod对文件权限的操作
在Unix和Linux的各种操作系统下,每个文件(文件夹也被看作是文件)都按读.写.运行设定权限. 例如我用ls -l命令列文件表时,得到如下输出: -rw-r--r-- 1 apple users ...