Description

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

Input

第一行两个数n,m。
第二行n个数,a[i]。
接下来m行,每行两个数l,r,表示询问[l,r]这个区间。

Output

m行,每行对应一个答案。

Sample Input

7 5
1 1 3 2 3 4 3
1 3
1 4
3 7
1 7
6 6

Sample Output

1
0
3
0
4

HINT

n,m≤500000

主席树模板题。

 #include<cstdio>
#include<algorithm>
#include<cstring>
using namespace std;
const int N=5e5+;
int n,m,sz,cnt,tmp,id,Li,Ri,a[N],b[N],rt[N];
struct node{int sum,lc,rc;}tr[N*];
int read()
{
int x=,f=;char c=getchar();
while(c<''||c>''){if(c=='-')f=-;c=getchar();}
while(c>=''&&c<=''){x=x*+c-'';c=getchar();}
return x*f;
}
void build(int& root,int L,int R)
{
root=++cnt;tr[root].sum=;
if(L==R)return;int mid=(L+R)>>;
build(tr[root].lc,L,mid);build(tr[root].rc,mid+,R);
}
void up(int& root,int L,int R,int last,int num)
{
root=++cnt;tr[root]=(node){tr[last].sum+,tr[last].lc,tr[last].rc};
if(L==R)return;int mid=(L+R)>>;
if(num<=mid)up(tr[root].lc,L,mid,tr[last].lc,num);
else up(tr[root].rc,mid+,R,tr[last].rc,num);
}
int query(int ql,int qr,int L,int R,int K)
{
if(L==R){if(tr[qr].sum-tr[ql].sum>=K)return L;return ;}
int mid=(L+R)>>;
tmp=tr[tr[qr].lc].sum-tr[tr[ql].lc].sum;
if(tmp>=K)return query(tr[ql].lc,tr[qr].lc,L,mid,K);
else return query(tr[ql].rc,tr[qr].rc,mid+,R,K);
}
void work()
{
Li=read();Ri=read();
id=query(rt[Li-],rt[Ri],,sz,(Ri-Li+)/+);
printf("%d\n",b[id]);
}
int main()
{
n=read();m=read();
for(int i=;i<=n;i++)a[i]=b[i]=read();
sort(b+,b+n+);sz=unique(b+,b+n+)-b-;
build(rt[],,sz);
for(int i=;i<=n;i++)a[i]=lower_bound(b+,b+sz+,a[i])-b;
for(int i=;i<=n;i++)up(rt[i],,sz,rt[i-],a[i]);
while(m--)work();
return ;
}

【bzoj 3524】[Poi2014]Couriers的更多相关文章

  1. 【BZOJ3524/2223】[Poi2014]Couriers 主席树

    [BZOJ3524][Poi2014]Couriers Description 给一个长度为n的序列a.1≤a[i]≤n.m组询问,每次询问一个区间[l,r],是否存在一个数在[l,r]中出现的次数大 ...

  2. 【BZOJ 3524】【Poi2014】Couriers 可持久化线段树

    为什么这个主席树叫可持久化线段树,我不知道,具体得问达神.我无限T,然后DaD3zZ一针见血地指出了我的N*50爆内存导致无限编译超时O)ZO)ZO)Z真是太神啦.以图为鉴: 达神题解传送门:http ...

  3. 主席树【bzoj3524(p3567)】[POI2014]Couriers

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

  4. 【BZOJ 1150】 1150: [CTSC2007]数据备份Backup (贪心+优先队列+双向链表)

    1150: [CTSC2007]数据备份Backup Description 你在一家 IT 公司为大型写字楼或办公楼(offices)的计算机数据做备份.然而数据备份的工作是枯燥乏味 的,因此你想设 ...

  5. Kruskal算法及其类似原理的应用——【BZOJ 3654】tree&&【BZOJ 3624】[Apio2008]免费道路

    首先让我们来介绍Krukal算法,他是一种用来求解最小生成树问题的算法,首先把边按边权排序,然后贪心得从最小开始往大里取,只要那个边的两端点暂时还没有在一个联通块里,我们就把他相连,只要这个图里存在最 ...

  6. 【BZOJ 2957】楼房重建&&Codechef COT5 Count on a Treap&&【NOIP模拟赛】Weed 线段树的分治维护

    线段树是一种作用于静态区间上的数据结构,可以高效查询连续区间和单点,类似于一种静态的分治.他最迷人的地方在于“lazy标记”,对于lazy标记一般随我们从父区间进入子区间而下传,最终给到叶子节点,但还 ...

  7. LCA 【bzoj 4281】 [ONTAK2015]Związek Harcerstwa Bajtockiego

    [bzoj 4281] [ONTAK2015]Związek Harcerstwa Bajtockiego Description 给定一棵有n个点的无根树,相邻的点之间的距离为1,一开始你位于m点. ...

  8. 【BZOJ3524】 [Poi2014]Couriers

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

  9. 【BZOJ 1191】 [Apio2010]特别行动队 (斜率优化)

    dsy1911: [Apio2010]特别行动队 [题目描述] 有n个数,分成连续的若干段,每段的分数为a*x^2+b*x+c(a,b,c是给出的常数),其中x为该段的各个数的和.求如何分才能使得各个 ...

随机推荐

  1. thinkphp5 如何使用查询事件?

    它是对数据库的CURD操作事件进行了钩子,当事件触发时,会进行回调. 就像是注册事件和前置方法或后置方法类似 下面是demo <?php namespace app\index\controll ...

  2. C# Winform多窗体&&构造函数传值

    一.多窗体:三种打开窗体的状态: 最最基础的弹窗: //写在按钮的点击事件内: //实例需要弹出的窗口的类: Form2 f2 = new Form2(); f2.Show(); 1.弹窗窗口: // ...

  3. Flask Mysql数据库连接

    下载库: pip install flask-sqlalchemy 下载后进入终端使用python后import导入模块测试没有报错就说明成功了 py文件: # -*- encoding: utf-8 ...

  4. c语言笔记: 对 void *lpObj 进行类型转换时,一不留神,后果很严重

    问题描述: 一个项目之前测试的时候一点问题没有,今天早上软件在一个特定的条件下出现崩溃情况,但并不是每次都会崩溃情,崩溃概率达到80%. 经过上午3个小时的排查,终于找到原因. 在项目中,我使用了一个 ...

  5. av_seek_frame() 定位为什么不准呢?

    初次学习和使用ffmpeg,电脑系统有点老,没办法使用最新版的ffmpeg 3.3,只能从别处下载了一个2.8版的用用,官网提供的历史版本都没有我电脑可用的版本. 花了两天时间学习并写了一个简单的处理 ...

  6. 工具类:Colletions ,Arrays(静态导入,可变参数,强循环)

    一.Collecti 专门用来操作集合的工具类,没有构造函数,全静态方法. 常用方法: static <T extends Comparable<? super T>> voi ...

  7. unittest的使用三——断言

    常用的断言有3种: 判断两个值是不是都相等,参数分别是第一个值,第二个值,msg代表不想等的话,描述的信息 def assertEqual(self, first, second, msg=None) ...

  8. JS生成随机数并排序

    JS生成[10,100]之间的十个随机数,并排序 function getRandom(start,end){ var m=end-start+1 return Math.floor(Math.ran ...

  9. mysql 自定义函数与自定义存储过程的调用方法

    存储过程:call  过程名(参数) 函数:      select  函数名(参数)

  10. 环境变量(1):PATH的修改

    1.查看当前PATH值:echo $PATH 2.只在当前会话生效操作 1)PATH=$PATH:/sbin 2)export PATH 3)echo $PATH  --再看此时的PATH值!不过这个 ...