P2468 SDOI2010 粟粟的書架

2022-05-19 11:43:21 字數 1628 閱讀 3692

傳送門

二合一題....

前面 $50$ 分:

考慮取書顯然優先取厚的,所以答案滿足單調性

發現 $p_$ 不大,所以考慮二分最小厚度 $mid$,把大於等於 $mid$ 的書取走

維護 $cnt[i][j][k]$ 表示位置 $i,j$ 為右下角一直到 $1,1$ 的矩形內厚度大於等於 $k$ 的書的數量

維護 $sum[i][j][k]$ 表示位置 $i,j$ 為右下角一直到 $1,1$ 的矩形內厚度大於等於 $k$ 的書的總厚度

然後就可以愉快地二分答案了,注意最後要特判一下厚度為 $ans$ 的書不完全取完的情況!

後面 $50$ 分:

因為只有一行,考慮用主席樹維護每個區間的所有值,然後處理詢問在主席樹上走就好了

同樣注意特判最後一種厚度的書不完全取完的情況

#include#include

#include

#include

#include

using

namespace

std;

typedef

long

long

ll;inline

intread()

while(ch>='

0'&&ch<='

9')

return x*f;

}const

int n=207,m=5e5+7,inf=1e9+7

;int

n,m,q;

int cnt[n][n][1007],sum[n][n][1007];//

sum是總和,cnt是數量

intxa,ya,xb,yb,h,mx;

inline

int clac(int p) //

求乙個矩形的sum

inline int cnt(int p) //

求乙個矩形的cnt

inline int query()//

二分答案

return

res;

}int

bk[n][n];

void solve1()//

前面50分

while(q--)

}int t[m<<4],sz[m<<4],l[m<<4],r[m<<4

],rt[m],tot;

intres,val;

inline

void ins(int &o,int l,int r,int

pre)

inline

void query(int hea,int las,int l,int r)//

在主席樹上走

if(t[r[las]]-t[r[hea]]<=val)//

優先取大的

else query(r[hea],r[las],mid+1

,r);

}inline

void solve2()//

後50分

//特判

res=0; query(rt[l-1],rt[r],1,1000

); printf(

"%d\n

",res);

}}int

main()

P2468 SDOI2010 粟粟的書架

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

P2468 SDOI2010 粟粟的書架 題解

你有乙個長r,寬c的矩陣,矩陣上每個格仔有權值,有m次詢問,每次給出乙個矩形左上角 x1,y1 和右下角 x2 y2 以及乙個值h,求 在該矩形覆蓋的權值和是否大於h,最小需要幾個權值就可以大於h。資料規模和約定 對於10 的資料,滿足r,c 10 對於20 的資料,滿足r,c 40 對於50 的資...

Sdoi2010 粟粟的書架

主席樹 二分 字首和 time limit 30 sec memory limit 552 mb submit 919 solved 366 submit status discuss 第一行是三個正整數r,c,m。接下來是乙個r行c列的矩陣,從上到下 從左向右依次給出了每本書的頁數pi,j。接下來...