Loi_Vampire's Blog

自己选择的路,就算跪着也要走完

01/10
10:43
数据结构 树套树 线段树

BZOJ 3110 [Zjoi2013]K大数查询 树套树

Description

有N个位置,M个操作。操作有两种,每次操作如果是1 a b c的形式表示在第a个位置到第b个位置,每个位置加入一个数c 如果是2 a b c形式,表示询问从第a个位置到第b个位置,第C大的数是多少。

Input

第一行N,M 接下来M行,每行形如1 a b c或2 a b c

Output

输出每个询问的结果

Sample Input

2 5

1 1 2 1

1 1 2 2

2 1 1 2

2 1 1 1

2 1 2 3

Sample Output

1

2

1

HINT

【样例说明】

第一个操作 后位置 1 的数只有 1 , 位置 2 的数也只有 1 。 第二个操作 后位置 1

的数有 1 、 2 ,位置 2 的数也有 1 、 2 。 第三次询问 位置 1 到位置 1 第 2 大的数 是

1 。 第四次询问 位置 1 到位置 1 第 1 大的数是 2 。 第五次询问 位置 1 到位置 2 第 3

大的数是 1 。‍

N,M<=50000,N,M<=50000

a<=b<=N

1操作中abs(c)<=N

2操作中c<=Maxlongint

Source

Solution

树套树,外层权值线段树、内层区间线段树。 原本想写区间线段树套权值线段树的,可是发现修改不会,好像要标记永久化……然而蒟蒻不会。

询问的时候,采用类似二分的方式,查询[ 1,mid ] ([ mid + 1, n ])有多少在询问的区间内,如果<排名,就往右(左),否则往左(右)。 听说这题根本就没有负数?233