集訓隊互測 2012 Attack

2021-09-26 08:41:42 字數 2372 閱讀 1203

description

chnlich非常喜歡玩三國志這款遊戲,並喜歡用一些策略出奇制勝。現在,他要開始征服世界的旅途了。他的敵人有n

nn座城市和n

nn個太守,n

nn個城市可以看作在二維平面上的n

nn個點。n

nn座城市的標號為0,1

,2,⋯

,n−1

0,1,2,\cdots,n-1

0,1,2,

⋯,n−

1。第i

ii座城市的座標為(xi

,yi)

(x_i,y_i)

(xi​,y

i​),鎮守這座城市的太守的能力值為z

iz_i

zi​。

chnlich每次會選擇乙個邊平行於座標軸的矩形區域,並奇襲其中太守能力值第k

kk小的城市(奇襲結束之後城市與太守依然存在)。

不過,他的敵人經常會偷偷交換兩座城市的太守,防止弱點被chnlich發現。

現在,chnlich想要知道,每次奇襲時他的敵人的能力值。

input

輸入的第一行包含兩個整數n

nn,m

mm,n

nn表示城市與太守的個數,m

mm表示接下來發生了m

mm個事件。

輸入的第二行到第n+1

n+1n+

1行,每行包含三個整數,第i+2

i+2i+

2行的三個整數依次表示編號為i

ii的城市的 xi,

yi,z

ix_i,y_i,z_i

xi​,yi

​,zi

​,含義如題所述。

輸入的第n+2

n+2n+

2行到第n+m

+1

n+m+1

n+m+

1行,每行有兩種可能形式:

output

對於每乙個query,輸出一行。

若不存在第k

kk小能力值的太守,輸出it doesn't exist.

否則輸出乙個整數,表示矩形內能力值第k

kk小太守的能力值。

sample input

3 5

1 1 1

2 2 2

3 3 3

query 1 1 3 3 3

swap 0 1

query 2 2 4 4 1

swap 2 2

query 2 2 3 3 3

sample output

3

1

it doesn't exist.

hint

對於100

100%

100的資料,n

≤60000

n\leq60000

n≤6000

0,m≤

10000

m\leq10000

m≤1000

0,0≤xi

,yi,

zi≤1

09,k

≤109

0\leq x_i,y_i,z_i\leq 10^9,k\leq10^9

0≤xi​,

yi​,

zi​≤

109,

k≤10

9,保證所有操作均合法。

怎麼說呢,直接按太守能力值排序,暴力o(n

)o(n)

o(n)

找第k

kk大,找到了立即輸出,交換的時候不要交換能力值,交換座標即可。於是就這樣水過了。

#include

#include

#include

using

namespace std;

#define maxn 600000

struct pointa[maxn+5]

;int rev[maxn+5]

;bool

cmp(point i,point j)

intmain()

}}if(k)

puts

("it doesn't exist.");

}else

}}

主席樹 2012集訓隊互測 Middle

jzoj 2902 集訓隊互測2012 middle 陳立傑 題解 這題雖然不是這幾天做的,但是最近在搞資料結構,再總結一下還是會有收穫的。複習時應該看看 設乙個序列s從大到小排序後為s 1.k 則中位數為m s k 2向上取整 那就意味著,在序列s中,大於等於m的數大於等於k 2。如果把序列s轉化...

集訓隊互測2015 Robot

題目描述 題解 維護兩顆線段樹,維護最大值和最小值,因為每次只有單點查詢,所以可以直接在區間插入線段就可以了。注意卡常,不要寫stl,用鍊錶把同類修改串起來就好了。pragma gcc optimize 2 pragma gcc optimize 3 include include include ...

集訓隊互測2013 城市規劃

求n個點的帶標號連通簡單圖的個數。答案對1004535809取模。n 130000 根據套路,首先我們需要求出n個點的帶標號簡單圖的個數,設為g n 顯然我們有g n 2 n n 1 2 考慮設答案為f n 要怎麼求出?列舉1號點所在的聯通塊的大小,我們可以知道 g n i 1n f i ci 1 ...