BZOJ1926 粟粟的書架(主席樹,字首和)

2021-08-14 07:38:28 字數 1942 閱讀 1634

第一行是三個正整數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% r=1

因為只有一行,

詢問後k大滿足條件

那就直接乙個主席樹就可以了

然後,50% r,c<=200

我就不會做了

還傻乎乎的以為是主席樹

然而,這題

直接維護乙個二維字首和,另加一維表示書的頁數

然後二分一下書的最少頁數就可以了

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

using

namespace

std;

inline

int read()

int r,c,m;

int p[201][201],sum[201][201][1001],tot[201][201][1001];

int count(int x1,int y1,int x2,int y2,int k)

int number(int x1,int y1,int x2,int y2,int k)

struct node

t[5500000];

int cnt,rt[552000];

void build(int &now,int l,int r)

void modify(int &now,int ff,int l,int r,int pos)

int query(int a,int b,int l,int r,int k)

int main()

while(m--)

if(!l)puts("poor qlw");

else

printf("%d\n",number(x1,y1,x2,y2,l)-(count(x1,y1,x2,y2,l)-h)/l);}}

else

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

return

0;}

1926 粟粟的書架 字首和 二分 主席樹

我們發現這道題其實是兩問 第一問是對於 r,c leq 200,m leq 200,000 是在矩形上的詢問 第二問是對於 r 1,c leq 500,000,m leq 20,000 是在序列上的詢問 所以我們寫兩個程式即可 首先我們來解決序列上的問題 很明顯我們在主席樹上二分查詢即可.o mlo...

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的數的總和...