Description

给一个长度为n的序列a。1≤a[i]≤n。m组询问,每次询问一个区间[l,r],是否存在一个数在[l,r]中出现的次数大于(r-l+1)/2。如果存在,输出这个数,否则输出0。

Solution

用主席树处理即可,

由于按值建树,其实只要不断判断左右子树子节点数量大于(r-l+1)/2就行了

Code

#include <cstdio>
#include <algorithm>
#define N 500010
using namespace std; int n,m,A[N],rank[N],T[N],ls[N*20],rs[N*20],sum[N*20],tot; inline int read(){
int x=0,f=1;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;
} void update(int last,int p,int l,int r,int &rt){
rt=++tot;
ls[rt]=ls[last],rs[rt]=rs[last],sum[rt]=sum[last]+1;
if(l==r) return;
int m=(l+r)>>1;
if(p<=m) update(ls[last],p,l,m,ls[rt]);
else update(rs[last],p,m+1,r,rs[rt]);
} int Query(int ss,int tt,int l,int r,int k){
if(l==r) return l;
int m=(l+r)>>1;
if(k<sum[ls[tt]]-sum[ls[ss]]) return Query(ls[ss],ls[tt],l,m,k);
else if(k<sum[rs[tt]]-sum[rs[ss]]) return Query(rs[ss],rs[tt],m+1,r,k);
else return 0;
} int main(){
n=read(),m=read();
for(int i=1;i<=n;++i) A[i]=rank[i]=read();
sort(rank+1,rank+n+1);
int cnt=unique(rank+1,rank+n+1)-(rank+1);
for(int i=1;i<=n;++i) A[i]=lower_bound(rank+1,rank+cnt+1,A[i])-rank;
for(int i=1;i<=n;++i) update(T[i-1],A[i],1,cnt,T[i]);
while(m--){
int l=read(),r=read();
printf("%d\n",rank[Query(T[l-1],T[r],1,cnt,(r-l+1)>>1)]);
}
return 0;
}

最新文章

  1. Rocksdb引擎记录格式
  2. 无法打开物理文件xxx.mdf操作系统错误 5:“5(拒绝访问。)” (Microsoft SQL Server,错误: 5120)的解决方法
  3. python数据结构之图的实现
  4. iOS -Swift 3.0 -String(字符串常规用法)
  5. SecureCRT最佳配色方法+直接修改默认配置方法 - imsoft.cnblogs
  6. Windows Phone中In-App Purchase应用内购买
  7. 【web性能】web性能测试工具推荐
  8. 搭建Nginx(负载均衡)+Redis(Session共享)+Tomcat集群
  9. Java基础知识强化之IO流笔记74:NIO之 Buffer
  10. GUIText的淡入淡出
  11. kubernetes 条件需求
  12. ubuntu16.04如何安装floodlight并且连接eclipse
  13. Python Semaphore
  14. OC的反射机制
  15. Ubuntu 16.04 安装 arm-linux-gcc 交叉编译工具
  16. HDU-2586-裸LCA入门-tarjan离线
  17. 内存和CPU资源控制
  18. USACO Section 2.1 Sorting a Three-Valued Sequence 解题报告
  19. Logstash 报错 An unexpected error occurred! :error =&gt; bad URI(is not URI?,是因为路径c:\program files\logstash\logstash.bat 中有空格
  20. 2017ACM暑期多校联合训练 - Team 7 1008 HDU 6127 Hard challenge (极角排序)

热门文章

  1. jQuery 结构的实现思路
  2. 经典SQL语句集锦(收藏版)
  3. 搭建Node.js Redis开发环境
  4. C 碎片三 运算符与表达式
  5. View模块
  6. JS常用公共方法封装
  7. Educational Codeforces Round 51 (Rated for Div. 2)
  8. 在浏览器地址栏按回车、F5、ctrl+F5刷新页面的区别
  9. intellij idea中设置SVN插件教程
  10. HDU 1059 Dividing 分配(多重背包,母函数)