AC. 梦想

frank_c1

[BZOJ 3524] Couriers

发布于2016年01月10日 | 暂无评论 | 698阅读 | 主席树,数据结构

题目描述

给定一个长度为n的序列a。

有m组询问,每次询问一个区间[l,r],是否存在一个数在[l,r]中出现的次数大于(r-l+1)/2。如果存在,输出这个数,否则输出0。

输入格式

第一行两个数n,m。n,m≤500000。

第二行n个数,a[i]。1≤a[i]≤n。

接下来m行,每行两个数l,r,表示询问[l,r]这个区间。

输出格式

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

题目解析

本题是用主席树来做。主席树本质上是一棵可持久化线段树。如果维护的信息满足区间减法,我们就可以用两棵线段树(即两个历史版本)相减的方式来获得其中某一段区间对应的线段树,从而解决静态区间第K大等问题。

这道题询问在区间[L,R]上是否存在一个数出现了R-L+1次。我们建一棵可持久化权值线段树,维护权值出现的次数。询问时,在该区间所对应的权值线段树上二分答案,即可找到是否有某一权值出现R-L+1次。

3524 = 2223,双倍经验非常开心哦~~~