BZOJ1926 Sdoi2010 粟粟的書架

2022-03-29 17:44:55 字數 2684 閱讀 5047

bzoj1926: [sdoi2010]粟粟的書架

幸福幼兒園 b29 班的粟粟是乙個聰明機靈、乖巧可愛的小朋友,她的愛好是畫畫和讀書,尤其喜歡 thomas h. cormen 的文章。

粟粟家中有乙個 r行c 列的巨型書架,書架的每乙個位置都擺有一本書,上數第i 行、左數第j 列擺放的書有pi,j頁厚。

粟粟每天除了讀書之外,還有一件必不可少的工作就是摘蘋果,她每天必須摘取乙個指定的蘋果。

粟粟家果樹上的蘋果有的高、有的低,但無論如何憑粟粟自己的個頭都難以摘到。

不過她發現, 如果在腳下放上幾本書,就可以夠著蘋果;

她同時注意到,對於第 i 天指定的那個蘋果,只要她腳下放置書的總頁數之和不低於hi,就一定能夠摘到。

由於書架內的書過多,父母擔心粟粟一天內就把所有書看完而耽誤了上幼兒園,於是每天只允許粟粟在乙個特定區域內拿書。

這個區域是乙個矩形,第 i 天給定區域的左上角是上數第 x1i行的左數第 y1i本書,右下角是上數第 x2i行的左數第y2i本書。

換句話說,粟粟在這一天,只能在這﹙x2i-x1i+1﹚×﹙y2i-y1i+1﹚本書中挑選若干本墊在腳下,摘取蘋果。

粟粟每次取書時都能及時放回原位,並且她的書架不會再撤下書目或換上新書,摘蘋果的任務會一直持續 m天。

給出每本書籍的頁數和每天的區域限制及採摘要求,請你告訴粟粟,她每天至少拿取多少本書,就可以摘到當天指定的蘋果。

第一行是三個正整數r,c,m。

接下來是乙個r行c列的矩陣,從上到下、從左向右依次給出了每本書的頁數pi,j。

接下來m行,第i行給出正整數x1i,y1i,x2i,y2i,hi,表示第i天的指定區域是﹙x1i,y1i﹚與﹙x2i,y2i﹚間的矩形,總頁數之和要求不低於hi。

保證1≤x1i≤x2i≤r,1≤y1i≤y2i≤c。

有m行,第i 行回答粟粟在第 i 天時為摘到蘋果至少需要 拿取多少本書。如果即使取走所有書都無法摘到蘋果,

則在該行輸出「poor qlw」 (不含引號)。

5 5 7

14 15 9 26 53

58 9 7 9 32

38 46 26 43 38

32 7 9 50 28

8 41 9 7 17

1 2 5 3 139

3 1 5 5 399

3 3 4 5 91

4 1 4 1 33

1 3 5 4 185

3 3 4 3 23

3 1 3 3 108

6 15

2 poor qlw

9 1

3 對於 10%的資料,滿足 r, c≤10; 

對於 20%的資料,滿足 r, c≤40; 

對於 50%的資料,滿足 r, c≤200,m≤200,000; 

另有 50%的資料,滿足 r=1,c≤500,000,m≤20,000; 

對於 100%的資料,滿足 1≤pi,j≤1,000,1≤hi≤2,000,000,000

毒瘤出題人強行把兩個題無縫對接到了一起。。。

還好兩個題都不是很毒瘤。。。

對於前$50\%$,很顯然乙個二維字首和+奇奇怪怪的容斥+二分答案。

設$sum[i][j][k]$從$(1,1)$到$(i,j)$的矩陣中數值$>=k$的數的總和,$num[i][j][k]$從$(1,1)$到$(i,j)$的矩陣中數值$>=k$的數的個數。

然後一波亂二分就好辣。

對於後$50\%$,去掉了一維,還要二分答案+字首和,這裡使用主席樹。

計算出右子樹的和(當然是差分之後的),如果和大於等於$h$說明答案在右子樹,反之在左子樹。

此時答案要加上右子樹的$size$(也是差分之後的),$h$要減去右子樹的和。

附**:

#include#include#include#includeusing namespace std;

int r,c,m;

inline int read()

while(c>='0'&&c<='9')

return date*w;

}namespace one

inline long long get_num(int x1,int y1,int x2,int y2,int k)

void work()

else r=mid-1;

}if(s==-1)printf("poor qlw\n");

else printf("%d\n",get_num(x1,y1,x2,y2,s)-(get_sum(x1,y1,x2,y2,s)-h)/s);

} }void init()

for(int k=0;k<=maxn;k++)

for(int i=1;i<=r;i++)

for(int j=1;j<=c;j++)

} void main()

}namespace twoa[maxn*20];

inline void buildtree()

void insert(int k,int l,int r,int &rt)

int query(int i,int j,int l,int r,int k)

void work()

printf("%d\n",query(root[x-1],root[y],1,1000,h));

} }void init()

} void main()

}int main()

BZOJ1926 Sdoi2010 粟粟的書架

幸福幼兒園 b29 班的粟粟是乙個聰明機靈 乖巧可愛的小朋友,她的愛好是畫畫和讀書,尤其喜歡 thomas h.co rmen 的文章。粟粟家中有乙個 r行c 列的巨型書架,書架的每乙個位置都擺有一本書,上數第i 行 左數第j 列 擺放的書有pi,j頁厚。粟粟每天除了讀書之外,還有一件必不可少的工作...

bzoj1926 Sdoi2010 粟粟的書架

題目鏈結 傳送門題解 大佬好強 看了看資料範圍,不是很明白為什麼明明兩道題卻硬要擠在一道題裡 0.5倍經驗orz 前一半的資料 r,c 200 字首和 二分 num i j k 表示 1,1 到 i,j 中比大於等於k的數有幾個 sum i j k 表示 1,1 到 i,j 中比大於等於k的數的總和...

bzoj1926 Sdoi2010 粟粟的書架

第一行是三個正整數r,c,m。接下來是乙個r行c列的矩陣,從上到下 從左向右依次給出了每本書的頁數pi,j。接下來m行,第i行給出正整數x1i,y1i,x2i,y2i,hi,表示第i天的指定區域是 x1i,y1i 與 x2i,y2i 間的矩形,總頁數之和要求不低於hi。保證1 x1i x2i r,1...