[pixiv] https://www.pixiv.net/member_illust.php?mode=medium&illust_id=62485671

向大(hei)佬(e)势力学(di)习(tou)

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

一看,区间查询,询问数字出现次数……

主席树啊

对前缀和的每一个节点建一个值域线段树(当然不是真建完)。每次查询的时候只需看该区间数字个数的和就可以了,因为如果该区间包含答案,则该区间的个数和一定大于r-l+1

没想到我竟已经会了主席树(水题)

#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std; const int N=500000+5; struct Node{
Node *ls,*rs;
int sum;
}*root[N],*null,pool[N*40],*tail=pool;
int n,m,aa; Node *newnode(){
Node *rt=++tail;
rt->ls=rt->rs=null;
rt->sum=0;
return rt;
}
void insert(Node *&ndn,Node *ndp,int le,int ri,int pos){
ndn=newnode();
ndn->sum=ndp->sum+1;
if(le==ri) return ;
ndn->ls=ndp->ls,ndn->rs=ndp->rs;
int mid=(le+ri)>>1;
if(pos<=mid) insert(ndn->ls,ndp->ls,le,mid,pos);
else insert(ndn->rs,ndp->rs,mid+1,ri,pos);
}
int query(Node *ndn,Node *ndp,int le,int ri,int limit){
if(le==ri) return le;
int mid=(le+ri)>>1;
int lsum=ndn->ls->sum - ndp->ls->sum;
int rsum=ndn->rs->sum - ndp->rs->sum;
int rt=0;
if(lsum>limit) rt=query(ndn->ls,ndp->ls,le,mid,limit);
if(rsum>limit) rt=query(ndn->rs,ndp->rs,mid+1,ri,limit);
return rt;
}
int main(){
null=++tail;
null->ls=null->rs=null;
null->sum=0;
root[0]=null; scanf("%d%d",&n,&m);
for(int i=1;i<=n;i++){
scanf("%d",&aa);
insert(root[i],root[i-1],1,n,aa);
}
int x,y;
while(m--){
scanf("%d%d",&x,&y);
printf("%d\n",query(root[y],root[x-1],1,n,(y-x+1)/2));
}
return 0;
}

最新文章

  1. linux显示中文
  2. 冒泡排序-java
  3. 基于Rest服务实现的RPC
  4. How to apply Local Group Policy settings silently using the ImportRegPol.exe and Apply_LGPO_Delta.exe utilities.
  5. node.js简单的页面输出
  6. linux 网络协议分析---3
  7. java产生不重复的随机数
  8. IO输入输出 2
  9. HW7.5
  10. PureMVC(JS版)源码解析(十一):Model类
  11. Tomcat剖析(二):一个简单的Servlet服务器
  12. PHP接口的思考
  13. TF之AE:AE实现TF自带数据集AE的encoder之后decoder之前的非监督学习分类—Jason niu
  14. JavaScript循环语句-6---for语句,while语句的应用逻辑
  15. tornado请求头/状态码/接口 笔记
  16. Nginx自定义404页面
  17. bzoj1677
  18. HDUOJ-Counting Triangles
  19. 接上篇—用spring注入DBbean,并使用maven管理
  20. 牛客网暑期ACM多校训练营(第五场):F - take

热门文章

  1. Robot Framwork +Selenium2环境搭建
  2. 安卓context(一)
  3. 在jsp页面中使用jstl标签
  4. Android事件分发机制详解(1)----探究View的事件分发
  5. 积累: .net里有个线程安全的int+1类
  6. kafka+windows+java+springboot中的配置
  7. 转换 nvarchar 值 &#39;2013071200000578&#39; 时溢出了整数列
  8. BZOJ5158 [Tjoi2014]Alice and Bob 【贪心 + 拓扑】
  9. 2017-7-18-每日博客-关于Linux基本命令CnetOS7系统基本操作命令.doc
  10. webpack最佳入门实践系列(6)