P3567 [POI2014]KUR-Couriers

题意:

给一个长度为 n 的正整数序列 a。共有 m 组询问,每次询问一个区间 [l,r] ,是否存在一个数在 [l,r]中出现的次数严格大于一半。如果存在,输出这个数,否则输出 0。

题解:

这算是主席树模板题
我们都知道主席树其实就是权值线段树的前缀和,我们想判断是否有出现次数严格大于一半的数,对于区间[l,r],len = r-l+1,比较2棵值域线段树中左子/右子的sz之差和len/2的关系,易知左子/右子只有其中之一能够满足sz之差超过len/2,递归下去继续找,复杂度1个log。

代码:

气死了,因为将rs敲成ls调了半小时

#include<iostream>
#include<cstdio>
#include<algorithm>
#include<string>
#include<cstring>
#include<queue>
#include<stack>
#include<cmath>
#include<set>
#include<map>
using namespace std;
#define ll long longtypedef pair<int,int>P;
const int INF=0x3f3f3f3f;
const int N=500005;
int a[N],b[N],tot=0;
int rt[N],ls[N*20],rs[N*20],sum[N*20];void build(int &o,int l,int r){o=++tot;sum[o]=0;if(l==r)return ;int m=(l+r)>>1;build(ls[o],l,m);build(rs[o],m+1,r);
}void update(int &o,int l,int r,int pre,int p){o=++tot;ls[o]=ls[pre];rs[o]=rs[pre];sum[o]=sum[pre]+1;if(l==r)return ;int m=(l+r)>>1;if(p<=m)update(ls[o],l,m,ls[pre],p);else update(rs[o],m+1,r,rs[pre],p);return ;
//    sum[o]=sum[ls[o]]+sum[rs[o]];
}int query(int lr,int rr,int l,int r,int k){if(l==r)return l;int m=(l+r)>>1;int cnt1=sum[ls[rr]]-sum[ls[lr]];int cnt2=sum[rs[rr]]-sum[rs[lr]];if(k<2*cnt1)return query(ls[lr],ls[rr],l,m,k);if(k<2*cnt2)return query(rs[lr],rs[rr],m+1,r,k);return 0;
}
void rd_txt(){#ifdef ONLINE_JUDGE#elsefreopen("in.txt","r",stdin);#endif
}
int main(){rd_txt();int n,m;scanf("%d%d",&n,&m);for(int i=1;i<=n;i++){scanf("%d",&a[i]);b[i]=a[i];}sort(a+1,a+1+n);int nn=unique(a+1,a+1+n)-(a+1);int l,r,k;//build(rt[0],1,nn);for(int i=1;i<=n;i++){int x=lower_bound(a+1,a+1+nn,b[i])-a;update(rt[i],1,nn,rt[i-1],x);}while(m--){scanf("%d%d",&l,&r);int ans=query(rt[l-1],rt[r],1,nn,r-l+1);printf("%d\n",a[ans]);}
}

P3567 [POI2014]KUR-Couriers相关推荐

  1. yxt's OI Plan

    My Plan 本篇blog只是记录一下我都咕了些啥 咕咕咕 P3246 [HNOI2016]序列 3289: Mato的文件管理 P3168 [CQOI2015]任务查询系统 P3567 [POI2 ...

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

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

  3. [骗分技巧——随机化Ⅱ] [Poi2014]Couriers,CodeChef - TKCONVEX

    文章目录 [Poi2014]Couriers problem solution code CodeChef - TKCONVEX problem solution code 随机算法的典型套路:枚举太 ...

  4. BZOJ 3524: [Poi2014]Couriers【主席树】

    3524: [Poi2014]Couriers [题目描述] 传送门 [题解] 主席树的裸题,要找出现次数大于一半的,那么他肯定出现在当前的左子树或右子树中,就这样查找就可以了. 代码如下 #incl ...

  5. 【BZOJ】3524 [POI2014] Couriers(主席树)

    题目 传送门:QWQ 传送到洛谷QWQ 分析 把求区间第k大的改一改就ok了. 代码 1 #include <bits/stdc++.h> 2 using namespace std; 3 ...

  6. 【bzoj3524】【Poi2014】【Couriers】可持久化线段树(主席树)水题

    [pixiv] https://www.pixiv.net/member_illust.php?mode=medium&illust_id=62485671 向大(hei)佬(e)势力学(di ...

  7. bzoj3524 [Poi2014]Couriers

    随机乱搞,调调参数勉强过 代码 1 #include<cstdio> 2 #include<vector> 3 #include<ctime> 4 #include ...

  8. 【BZOJ3524】 [Poi2014]Couriers

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

  9. BZOJ.3524.[POI2014]Couriers(主席树)

    题目链接 //119964kb 5780ms //主席树裸题啊.. #include <cstdio> #include <cctype> #define gc() getch ...

最新文章

  1. 怎么样MyEclipse配置Tomcat?
  2. UVA227 Puzzle
  3. javaBean为什么要实现Serializable接口?
  4. Pycharm 配置 Anaconda中解释器
  5. 基于Python语言使用RabbitMQ消息队列(一)
  6. 微软正式发布Azure Functions 2.0
  7. mysql 不需要@的变量_mysql参数变量
  8. nodejs+nginx获取真实ip
  9. 2018/01/08JAVA 基础 / 接口与继承:[Q]:若父类Hero提供了一个有参的构造方法,但是没有提供无参的构造方法。子类应该怎么处理?...
  10. Ubuntu 14.04 安装 WPS
  11. 几款远程工具介绍(Xshell)(SecureCRT)(putty)
  12. 线性回归(一)---一元线性回归
  13. XBug:一个强大的JavaScript调试器
  14. qq音乐linux版本下载地址,qq音乐linux版本下载
  15. USB加密狗复制USBTrace数据截取工具分享
  16. Gos —— 实现系统调用
  17. DHCP 解决单位网络私接路由器的办法
  18. Java毕业设计-公交路线查询管理系统
  19. C语言关于qsort函数的用法详细说明
  20. Cython入门到放弃(一)

热门文章

  1. 看到喜欢的人时的心跳​
  2. 教程丨亿万网友一起换头像欢庆新中国成立70周年,就差你了!
  3. 当Java、C++、Python等编程语言都变成妹子。。。
  4. mysql between 查询不出来_mysql的语句优化
  5. javadoc文档的生成方法_[springboot 开发单体web shop] 4. Swagger生成Javadoc
  6. c语言环境窗口组成,如何搭建C语言环境
  7. c语言长整数转化为16进制字符串,一个30位的字符串十进制长整数怎么转换为对应的十六进制和八进制...
  8. 在服务器系统怎么设置地址怎么办,路由器怎么设置地址
  9. 怎么从转移特性曲线上看dibl_「科普向」这篇让你快速搞懂IGBT的静态特性
  10. 数据科学与python语言实验——NumPy数值计算基础