二分,主席樹 洛谷 2468 粟粟的書架

2021-09-28 23:15:39 字數 1709 閱讀 4309

給出乙個矩陣,問乙個子矩陣中至少要多少個數才能使和≥

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