BZOJ_3524_[Poi2014]Couriers_主席树
BZOJ_3524_[Poi2014]Couriers_主席树
题意:给一个长度为n的序列a。1≤a[i]≤n。
m组询问,每次询问一个区间[l,r],是否存在一个数在[l,r]中出现的次数大于(r-l+1)/2。如果存在,输出这个数,否则输出0。
分析:
区间众数我们可以用主席树搞定
具体地,比较左右子树siz大小即可
代码:
#include <stdio.h>
#include <string.h>
#include <algorithm>
using namespace std;
#define N 500050
int t[N*20],ls[N*20],rs[N*20],n,m;
int root[N],a[N],tot;
struct A{
int num,id,v;
}d[N];
bool cmp1(const A &x,const A &y){ return x.num<y.num; }
bool cmp2(const A &x,const A &y){ return x.id<y.id; }
void insert(int x,int &y,int l,int r,int val){
y=++tot;
if(l==r) { t[y] = t[x] + 1; return ; }
int mid=l+r>>1;
if(val<=mid) rs[y]=rs[x],insert(ls[x],ls[y],l,mid,val);
else ls[y]=ls[x],insert(rs[x],rs[y],mid+1,r,val);
t[y]=t[ls[y]]+t[rs[y]];
}
int query(int x,int y,int l,int r,int len){
if(l==r) return a[l];
int mid=l+r>>1,sizls=t[ls[y]]-t[ls[x]],sizrs=t[rs[y]]-t[rs[x]];
if(sizls>len/2) return query(ls[x],ls[y],l,mid,len);
if(sizrs>len/2) return query(rs[x],rs[y],mid+1,r,len);
return 0;
}
int main()
{
scanf("%d%d",&n,&m);
int i,x,y,j;
for(i=1;i<=n;i++) scanf("%d",&d[i].num),d[i].id=i;
sort(d+1,d+n+1,cmp1);d[0].num=20003535;
for(i=1,j=0;i<=n;i++) { if(d[i].num!=d[i-1].num)j++;d[i].v=j;a[j]=d[i].num; }
sort(d+1,d+n+1,cmp2);
for(i=1;i<=n;i++) insert(root[i-1],root[i],1,n,d[i].v);
for(i=1;i<=m;i++) {
scanf("%d%d",&x,&y);
printf("%d\n",query(root[x-1],root[y],1,n,y-x+1));
}
}
BZOJ_3524_[Poi2014]Couriers_主席树的更多相关文章
- [bzoj3524/2223][Poi2014]Couriers_主席树
Couriers bzoj-3524 Poi-2014 题目大意:给定n个数的序列,询问区间内是否存在一个在区间内至少出现了(区间长度>>1)次的数.如果有,输出该数,反之输出0. 注释: ...
- BZOJ 3524: [Poi2014]Couriers [主席树]
3524: [Poi2014]Couriers Time Limit: 20 Sec Memory Limit: 256 MBSubmit: 1892 Solved: 683[Submit][St ...
- 【BZOJ3524/2223】[Poi2014]Couriers 主席树
[BZOJ3524][Poi2014]Couriers Description 给一个长度为n的序列a.1≤a[i]≤n.m组询问,每次询问一个区间[l,r],是否存在一个数在[l,r]中出现的次数大 ...
- [POI2014] KUR-Couriers (主席树)
[POI2014]KUR-Couriers 题目描述 Byteasar works for the BAJ company, which sells computer games. The BAJ c ...
- [BZOJ2223][BZOJ3524][Poi2014]Couriers 主席树
3524: [Poi2014]Couriers Time Limit: 20 Sec Memory Limit: 256 MBSubmit: 2436 Solved: 960[Submit][St ...
- BZOJ3524[Poi2014]Couriers——主席树
题目描述 给一个长度为n的序列a.1≤a[i]≤n.m组询问,每次询问一个区间[l,r],是否存在一个数在[l,r]中出现的次数大于(r-l+1)/2.如果存在,输出这个数,否则输出0. 输入 第一行 ...
- 洛谷P3567[POI2014]KUR-Couriers(主席树+二分)
题意:给一个数列,每次询问一个区间内有没有一个数出现次数超过一半 题解: 最近比赛太多,都没时间切水题了,刚好日推了道主席树裸题,就写了一下 然后 WA80 WA80 WA0 WA90 WA80 ?? ...
- BZOJ3524: [Poi2014]Couriers(主席树)
题意 题目链接 Sol 严格众数只会出现一次,那么建出主席树,维护子树siz,直接在树上二分即可 #include<bits/stdc++.h> #define LL long long ...
- 【bzoj3524】[Poi2014]Couriers 主席树
题目描述 给一个长度为n的序列a.1≤a[i]≤n.m组询问,每次询问一个区间[l,r],是否存在一个数在[l,r]中出现的次数大于(r-l+1)/2.如果存在,输出这个数,否则输出0. 输入 第一行 ...
随机推荐
- ambari2.6.1汉化记录
1.1测试机 Apache hadoop2.6Apache ambari 2.6.1集群规模:单节点操作系统 CentOS7以下所有操作均在root用户下执行 1.2安装环境 安装Maventar - ...
- AI之微信跳一跳
需要环境:1,Python3.6 2,android手机 3,ADB驱动,下载地址https://adb.clockworkmod.com/ 步骤: 配置Python3,ADB安装目录到环境变量pat ...
- 关于js对象添加属性
字符串类型的(注意要加引号): var obj={}; for(var i=0;i<10;i++){ eval("obj.key"+i+"='"+&quo ...
- JAVA面试题集
基础知识: 1.C++或Java中的异常处理机制的简单原理和应用. 当JAVA程序违反了JAVA的语义规则时,JAVA虚拟机就会将发生的错误表示为一个异常.违反语义规则包括2种情况.一种是JAVA类库 ...
- springMVC中添加restful 风格
RESTful架构:是一种设计的风格,并不是标准,只是提供了一组设计原则和约束条件,也是目前比较流行的一种互联网软件架构.它结构清晰.符合标准.易于理解.扩展方便,所以正得到越来越多网站的采用. 关于 ...
- centos安装nginx(针对一哥们的博客进行的详细补充(用红色字体标出了补充部分))
centos安装nginx 原文地址:http://www.cnblogs.com/leechenxiang/p/5402960.html 一.什么是nginx 是一个C语言开发的HTTP反向代理服务 ...
- Spring Cache 笔记
@(Java ThirdParty)[Spring Cache] Spring Cache Abstraction 简介 Spring Cache提供了对底层缓存使用的抽象,通过注解的方式使用缓存,减 ...
- 爬虫之urllib.error模块
error模块简介 我们在爬虫的时候发请求的时候难免出现错误,如访问不到服务器或者访问被禁止等等, 出错了之后urllib将错误信息封装成了一个模块对象中,这个模块就叫error模块 error的分类 ...
- maven包加载
1) IDEA包加载pom.xml配置 <build> <sourceDirectory>src/main/java</sourceDirectory> ...
- memset库函数
头文件:#include <string.h> 定义函数:void * memset(void *s, int c, size_t n); 函数说明:memset()会将参数s 所 ...