給出乙個矩陣,問乙個子矩陣中至少要多少個數才能使和≥
h\geq h
≥h,多組資料,分成1≤r
,c
≤200和r
=1,1
≤c
≤500000
1\leq r,c\leq 200和r=1,1\leq c\leq 500000
1≤r,c≤
200和
r=1,
1≤c≤
5000
00這顯然是一道以二分為核心的題目,但是這道題目二合一,對於r≠1
r\neq 1
r=
1維護二維字首大於等於某個值的數量以及它們的和,最後答案因為會有很多個相同的結果,所以要減掉,對於r=1
r=1r=
1用主席樹同樣維護,其實也和r≠1
r\neq 1
r=
1的答案求法有同樣的道理
#include
#include
#define rr register
using
namespace std;
const
int n=
500011
;struct recb[n<<4]
;int root[n]
,sw[
201]
[201][
1001
],mx,sr[
201]
[201][
1001
],tot,a[
201]
[201
],c[n]
,n,m,q;
inline
signed
iut(
)inline
void
print
(int ans)
inline
signed
max(
int a,
int b)
inline
signed
get_sw
(int x1,
int y1,
int x2,
int y2,
int now)
inline
signed
get_sr
(int x1,
int y1,
int x2,
int y2,
int now)
inline
void
update
(int
&rt,
int l,
int r,
int x)
inline
signed
query
(int rt1,
int rt2,
int l,
int r,
int h)
ans+
=(h+l-1)
/l;return ans;
}signed
main()
print
(get_sr
(x1,y1,x2,y2,l)-(
get_sw
(x1,y1,x2,y2,l)
-h)/l);}
putchar(10
);}}
else
}return0;
}
1926 粟粟的書架 字首和 二分 主席樹
我們發現這道題其實是兩問 第一問是對於 r,c leq 200,m leq 200,000 是在矩形上的詢問 第二問是對於 r 1,c leq 500,000,m leq 20,000 是在序列上的詢問 所以我們寫兩個程式即可 首先我們來解決序列上的問題 很明顯我們在主席樹上二分查詢即可.o mlo...
SDOI2010 粟粟的書架 主席樹 二分 dp
原題 題解 題目的意思是在子矩陣中選出最小的數量,使這些數的和大於等於h。注意到有一半的資料明顯不同,先考慮50分,暴力的做法是將這些數排序,從大往小選,但這樣顯然不行。注意到pi.j並不大,考慮dp的思想,val i j k 表示 1,1 i,j 的矩陣所有大於等於k的數的和,num i j k ...
粟粟的書架(主席樹 二維字首和)
一下子做了兩個題?題意 乙個問題求區間前k大的和,另乙個問題求矩形內前k大的和。思路 前乙個問題直接上主席樹 二分搞定 後乙個問題由於資料範圍比較小,用cnt i j k cnt i j k cnt i j k 記錄字首矩形中大於等於k kk的數有多少個,用pre i j k pre i j k p...