1. 程式人生 > >BZOJ3110: [Zjoi2013]K大數查詢(整體二分)

BZOJ3110: [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

解題思路:

剛開始把題目看錯了,以為是區間加法差點沒給我噁心死。

最後發現一個位置上可以有多個數。

那麼這道題就是帶修改整體二分。

將操作按時間序排序,在二分過程中不要破壞這個序。

二分答案時將操作中的K若大於mid就插入線段樹。

在時間序環境下查詢區間。

剩下的就是普通整體二分了。

程式碼: