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