正解:主席树/莫队

解题报告:

传送门!

这题好像就是个主席树板子题的样子,,,?

毕竟,主席树的最基本的功能就是,维护一段区间内某个数字的个数

但是毕竟是刚get到主席树,然后之前做的一直是第k大,这个是维护区间内数字个数,题目类型不一样,所以还是积累一下这个题型和对应的方法QAQ

顺便也水一发题解

所以还是写下这题

首先不难想到对于[l,r]的点直接把r的树和l-1的树做差就可以得到

这样现在就相当于是得到了一棵线段树

那肯定就是维护这个区间的所有数字的出现次数(,,,我发现我这里出现了两个意义不同的区间,星趴我后面解释一下)

显然出现的次数总和sum是已知不变的,不可能存在l和r都>=sum/2(,,,哦其实存在极端情况的然而不要在意这种细节,,,差不多做法QAQ!)

所以每次就往出现次数>=sum/2的区间跑,如果跑到叶子节点了,就说明存在,如果跑着跑着发现,两个区间都不满足>=sum/2,说明GG了,就不存在

然后就做完辣!

然后说下两个区间

第一个是最前面说,"首先不难想到对于[l,r]的点直接把r的树和l-1的树做差就可以得到",这里指的是[l,r]这个询问

第二个是第三行"那肯定就是维护这个区间的所有数字的出现次数"以及之后所有的关于区间的说法,指的都是序列上的区间

代码等下放QAQ

另外说下!这题还有个!莫队做法!虽然复杂度不对!但是能过去!但是我不想打了反正莫队基本上实现都很简单,懒得写了QAQ

#include<bits/stdc++.h>
using namespace std;
#define il inline
#define rg register
#define gc getchar()
#define rp(i,x,y) for(rg int i=x;i<=y;++i) const int N=;
int n,m,a[N],st[N],tot,nod_cnt,rt[N],r,l;
struct sgtr{int l,r,ls,rs,sz,name;}tr[N<<]; il int read()
{
rg char ch=gc;rg int x=;rg bool y=;
while(ch!='-' && (ch>'' || ch<''))ch=gc;
if(ch=='-')ch=gc,y=;
while(ch>='' && ch<='')x=(x<<)+(x<<)+(ch^''),ch=gc;
return y?x:-x;
}
il void build(int x,int l,int r)
{
++nod_cnt;tr[x].l=l,tr[x].r=r;tr[x].name=l;
if(l==r)return;
tr[x].ls=nod_cnt+;build(tr[x].ls,l,(l+r)>>);tr[x].rs=nod_cnt+;build(tr[x].rs,((l+r)>>)+,r);return;
}
il void modify(int x,int dat)
{
++nod_cnt;tr[nod_cnt]=tr[x];++tr[nod_cnt].sz;
if(tr[nod_cnt].l==tr[nod_cnt].r)return;
int mid=(tr[nod_cnt].l+tr[nod_cnt].r)>>;
if(dat<=mid){tr[nod_cnt].ls=nod_cnt+;modify(tr[x].ls,dat);}else{tr[nod_cnt].rs=nod_cnt+;modify(tr[x].rs,dat);}
}
il int query(int nw1,int nw2,int len)
{
if(tr[nw1].l==tr[nw1].r)return tr[nw1].name;
int tmp1=-;
if((tr[tr[nw2].ls].sz-tr[tr[nw1].ls].sz)*>len)tmp1=query(tr[nw1].ls,tr[nw2].ls,len);
if(tmp1!=-)return tmp1;
if((tr[tr[nw2].rs].sz-tr[tr[nw1].rs].sz)*>len)tmp1=query(tr[nw1].rs,tr[nw2].rs,len);
return tmp1;
} int main()
{
// freopen("kc.in","r",stdin);freopen("kc.out","w",stdout);
n=read();m=read();rp(i,,n)a[i]=st[i]=read();sort(st+,st++n);tot=unique(st+,st++n)-st-;rp(i,,n)a[i]=lower_bound(st+,st++tot,a[i])-st;
rt[]=;build(,,tot);
rp(i,,n){rt[i]=nod_cnt+;modify(rt[i-],a[i]);}
rp(i,,m){l=read(),r=read();int tmp=query(rt[l-],rt[r],r-l+);if(tmp==-)printf("0\n");else printf("%d\n",st[tmp]);}
return ;
}

然后这个是主席树的做法QAQ

最新文章

  1. eclipse左边导航package explorer自动定位
  2. Linux_文件打包,压缩,解压
  3. Python中reactor,factory,protocol
  4. 基于HOG-3D的时空描述子
  5. 论垃圾邮件危害性及U-Mail邮件系统必杀技
  6. BZOJ3680 : 吊打XXX
  7. passport 自动取密码
  8. 2016 ACM/ICPC Asia Regional Qingdao Online HDU5882
  9. C语言 段位
  10. PB中掉用Run以后,等Run的程序关闭以后才会执行后边的语句
  11. linux 查看当前路径命令:pwd
  12. [原博客] BZOJ 2242 [SDOI2011] 计算器
  13. BZOJ2293: 【POJ Challenge】吉他英雄
  14. BZOJ3433: [Usaco2014 Jan]Recording the Moolympics
  15. 第002篇 深入体验C#项目开发(一)
  16. CentOS搭建PHP服务器环境(LAMP)
  17. C#中调用Windows API时的数据类型对应关系
  18. 在.NET项目中使用PostSharp,使用CacheManager实现多种缓存框架的处理
  19. 十、Hadoop学习笔记————Hive与Hbase以及RDBMS(关系型数据库)的关系
  20. Yii 1.1 请求报400错误

热门文章

  1. [原]关于在Python和C#之间消息传递的问题
  2. Java知多少(64)线程死锁
  3. 程序-代写(qq:928900200)
  4. CSS3 Flexbox可视化指南
  5. python3 zip压缩文件压缩多个不同文件夹内的文件方法
  6. Python套接字编程(1)——socket模块与套接字编程
  7. [OpenCV] Samples 16: Decompose and Analyse RGB channels
  8. 关于JSON call 的一个小问题
  9. Ubuntu 基于Docker的TensorFlow 环境搭建
  10. JMS规范概览