Krydom: 暁の水平线に胜利を刻むのです

ソロモンの悪夢、見せてあげる!

@krydom1年前

03/8
20:08
主席树

Poi2014 Couriers [bzoj 3524]

00:00/00:00

♦♦♦♦♦♦   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

♦♦♦♦♦♦   题解  ♦♦♦♦♦♦

良心不用离散化

用主席树可以解决此题,【然而这种用途还是称为权值线段树比较好

记录下1-x在l-r区间内的个数,然后随便搞搞

c++:

pascal:

 

Poi2014 Couriers [bzoj 3524]