題目描述
給你乙個 n \times nn×n 的矩陣,不用算矩陣乘法,但是每次詢問乙個子矩形的第 kk 小數。
輸入格式
第一行有兩個整數,分別表示矩陣大小 nn 和詢問組數 qq。
第 22 到第 (n + 1)(n+1) 行,每行 nn 個整數,表示這個矩陣。第 (i + 1)(i+1) 行的第 jj 個數表示矩陣第 ii 行第 jj 列的數 a_a
i,j
。接下來 qq 行,每行五個整數 x_1, y_1, x_2, y_2, kx1
,y1 ,x2
,y2 ,k,表示一組詢問,要求找到以 (x_1, y_1)(x1
,y1 ) 為左上角,(x_2, y_2)(x2
,y2 ) 為右下角的子矩形中的第 kk 小數。
輸出格式
對於每組詢問,輸出一行乙個整數表示答案。
輸入輸出樣例
輸入 #1複製
2 22 1
3 41 2 1 2 1
1 1 2 2 3
輸出 #1複製13
說明/提示
資料規模與約定
對於 20%20% 的資料,保證 n \leq 100n≤100,q \leq 10^3q≤103。
對於 40%40% 的資料,保證 n \leq 300n≤300,q \leq 10^4q≤104。
對於 60%60% 的資料,保證 n \leq 400n≤400,q \leq 3 \times 10^4q≤3×104。
對於 100%100% 的資料,保證 1 \leq n \leq 5001≤n≤500,1 \leq q \leq 6 \times 10^41≤q≤6×10
4,0 \leq a_ \leq 10^90≤a
i,j
≤109
。這道題把序列查詢區間第kk大搬到了矩陣上,但是仍然滿足二分性質,所以我們還是可以整體二分
而我們沿用序列上的做法,把點和詢問都離線下來,揉在一起整體二分
唯一不一樣的地方就是需要二維樹狀陣列
#include
const
int n =
500;
const
int m =
6e4;
const
int n2 =
250000
;const
int inf =
1e9;
using
namespace std;
struct node
q[m + n2 +5]
,q1[m + n2 +5]
,q2[m + n2 +5]
;int n,m,a[n +5]
[n +5]
,ans[m +5]
,c[n +5]
[n +5]
,cnt;
intlowbit
(int x)
void
add(
int x,
int y,
int s)
intquery
(int x,
int y)
intquery_sum
(int x1,
int y1,
int x2,
int y2)
void
solve
(int l,
int r,
int l,
int r)
int mid = l + r >>
1,cnt1 =
0,cnt2 =0;
for(
int i = l;i <= r;i++)if
(q[i]
.id ==0)
else
q2[++cnt2]
= q[i];}
else
}for
(int i =
1;i <= cnt1;i++)if
(q1[i]
.id ==0)
add(q1[i]
.x1,q1[i]
.y1,-1
);for(
int i = l;i <= l + cnt1 -
1;i++
) q[i]
= q1[i - l +1]
;for
(int i = l + cnt1;i <= r;i++
) q[i]
= q2[i - l - cnt1 +1]
;solve
(l,mid,l,l + cnt1 -1)
;solve
(mid +
1,r,l + cnt1,r);}
intmain()
;}for(
int i =
1;i <= m;i++
)solve(0
,inf,
1,cnt)
;for
(int i =
1;i <= m;i++
)printf
("%d\n"
,ans[i]);
return0;
}
國家集訓隊 矩陣乘法
洛谷 p1527 這是一道整體二分的經典題目。這道題顯然可以給每個詢問二分答案,統計該詢問矩陣中小於等於mid的元素個數。如果大於等於k,說明猜大了,否則說明猜小了。如果用這種方法的話,對於每個詢問都至少要用o 詢問矩陣大小 log值域 的時間複雜度解決,多組詢問的話時間不能接受。發現多個詢問的二分...
Luogu P1527 國家集訓隊 矩陣乘法
給定乙個 n n n times n n n 的矩陣,對於 q qq 組 x1,y1,x 2,y2 k x1,y1,x2,y2,k x1,y1,x2,y 2,k,你需要求出該子矩陣內的第 k kk 大的值。資料範圍1 n 500,1 q 60000 1 leqslant n leqslant 500...
洛谷 P1527 國家集訓隊 矩陣乘法
矩陣第k小 一道練習整體二分的比較好的題 這道題把序列查詢區間第 k 小搬到了矩陣上,但是仍然滿足二分性質,所以我們還是可以整體二分 而我們沿用序列上的做法,把點和詢問都離線下來,揉在一起整體二分 唯一不一樣的地方就是需要二維樹狀陣列,這個很好理解吧qwq 複雜度 o qlog 3n code in...