第一行是三個正整數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的數的總和...