传送门

二合一题....

前面 $50$ 分:

考虑取书显然优先取厚的,所以答案满足单调性

发现 $P_{i,j}$ 不大,所以考虑二分最小厚度 $mid$,把大于等于 $mid$ 的书取走

维护 $cnt[i][j][k]$ 表示位置 $i,j$ 为右下角一直到 $1,1$ 的矩形内厚度大于等于 $k$ 的书的数量

维护 $sum[i][j][k]$ 表示位置 $i,j$ 为右下角一直到 $1,1$ 的矩形内厚度大于等于 $k$ 的书的总厚度

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

后面 $50$ 分:

因为只有一行,考虑用主席树维护每个区间的所有值,然后处理询问在主席树上走就好了

同样注意特判最后一种厚度的书不完全取完的情况

#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cmath>
#include<cstring>
using namespace std;
typedef long long ll;
inline int read()
{
int x=,f=; char ch=getchar();
while(ch<''||ch>'') { if(ch=='-') f=-; ch=getchar(); }
while(ch>=''&&ch<='') { x=(x<<)+(x<<)+(ch^); ch=getchar(); }
return x*f;
}
const int N=,M=5e5+,INF=1e9+;
int n,m,Q; int cnt[N][N][],sum[N][N][];//sum是总和,cnt是数量
int xa,ya,xb,yb,H,mx;
inline int clac(int p) { return sum[xb][yb][p]-sum[xa-][yb][p]-sum[xb][ya-][p]+sum[xa-][ya-][p]; }//求一个矩形的sum
inline int CNT(int p) { return cnt[xb][yb][p]-cnt[xa-][yb][p]-cnt[xb][ya-][p]+cnt[xa-][ya-][p]; }//求一个矩形的cnt
inline int query()//二分答案
{
int res=-,l=,r=mx+,mid=l+r>>;
while(l<=r)
{
mid=l+r>>;
if(clac(mid)>=H) l=mid+,res=mid;
else r=mid-;
}
return res;
}
int bk[N][N];
void solve1()//前面50分
{
for(int i=;i<=n;i++)
for(int j=;j<=m;j++) bk[i][j]=read(),mx=max(mx,bk[i][j]);
for(int k=;k<=mx;k++)
for(int i=;i<=n;i++)
for(int j=;j<=m;j++)
{
sum[i][j][k]=sum[i-][j][k]+sum[i][j-][k]-sum[i-][j-][k]+(bk[i][j]>=k ? bk[i][j] : );
cnt[i][j][k]=cnt[i-][j][k]+cnt[i][j-][k]-cnt[i-][j-][k]+(bk[i][j]>=k ? : );
}
while(Q--)
{
xa=read(),ya=read(),xb=read(),yb=read(),H=read();
int t=query();
if(t==-) printf("Poor QLW\n");
else printf("%d\n", CNT(t) - (clac(t)-H)/t );//注意特判厚度为t的书不全取
}
} int t[M<<],sz[M<<],L[M<<],R[M<<],rt[M],tot;
int res,val;
inline void ins(int &o,int l,int r,int pre)
{
o=++tot; t[o]=t[pre]+val; sz[o]=sz[pre]+;
int mid=l+r>>;
if(l==r) return;
if(val<=mid) ins(L[o],l,mid,L[pre]),R[o]=R[pre];
else ins(R[o],mid+,r,R[pre]),L[o]=L[pre];
}
inline void query(int hea,int las,int l,int r)//在主席树上走
{
int mid=l+r>>;
if(l==r)
{
res+= (val/l+(val%l!=)) ;//注意特判
return;
}
if(t[R[las]]-t[R[hea]]<=val)//优先取大的
{
res+=sz[R[las]]-sz[R[hea]]; val-=t[R[las]]-t[R[hea]];
query(L[hea],L[las],l,mid);
}
else query(R[hea],R[las],mid+,r);
}
inline void solve2()//后50分
{
int l,r,a,b;
for(int i=;i<=m;i++) val=read(),ins(rt[i],,,rt[i-]);
while(Q--)
{
a=read(),l=read(),b=read(),r=read(),val=read();
if(t[rt[r]]-t[rt[l-]]<val) { printf("Poor QLW\n"); continue; }//特判
res=; query(rt[l-],rt[r],,);
printf("%d\n",res);
}
} int main()
{
n=read(),m=read(),Q=read();
if(n>) solve1();
else solve2();
return ;
}

P2468 [SDOI2010]粟粟的书架的更多相关文章

  1. bzoj1926[Sdoi2010]粟粟的书架 二分 主席树

    1926: [Sdoi2010]粟粟的书架 Time Limit: 30 Sec  Memory Limit: 552 MBSubmit: 1064  Solved: 421[Submit][Stat ...

  2. bzoj 1926: [Sdoi2010]粟粟的书架 (主席树+二分)

    链接:https://www.lydsy.com/JudgeOnline/problem.php?id=1926 题面; 1926: [Sdoi2010]粟粟的书架 Time Limit: 30 Se ...

  3. BZOJ1926:[SDOI2010]粟粟的书架——题解

    http://www.lydsy.com/JudgeOnline/problem.php?id=1926 https://www.luogu.org/problemnew/show/P2468 幸福幼 ...

  4. [bzoj1926][Sdoi2010]粟粟的书架_二分_主席树

    粟粟的书架 bzoj-1926 Sdoi-2010 题目大意:题目链接 注释:略 想法:分成两个题 前面的我们可以二分,直接二分出来检验即可. 对于R=1的,相当一个数列,我们在上面建立主席树. 然后 ...

  5. Bzoj 1926: [Sdoi2010]粟粟的书架(二分答案+乱搞+主席树)

    1926: [Sdoi2010]粟粟的书架 Time Limit: 30 Sec Memory Limit: 552 MB Description 幸福幼儿园 B29 班的粟粟是一个聪明机灵.乖巧可爱 ...

  6. [SDOI2010]粟粟的书架 [主席树]

    [SDOI2010]粟粟的书架 考虑暴力怎么做 显然是提取出来 (x2-x1+1)*(y2-y1+1) 个数字拿出来 然后从大到小排序 然后就可以按次取数了- 然而接下来看数据范围 \(50\%\ r ...

  7. [BZOJ1926][SDOI2010]粟粟的书架

    BZOJ Luogu Description 幸福幼儿园 B29 班的粟粟是一个聪明机灵.乖巧可爱的小朋友,她的爱好是画画和读书,尤其喜欢 Thomas H. Cormen 的文章.粟粟家中有一个 R ...

  8. BZOJ1926[Sdoi2010]粟粟的书架——二分答案+主席树

    题目描述 幸福幼儿园 B29 班的粟粟是一个聪明机灵.乖巧可爱的小朋友,她的爱好是画画和读书,尤其喜欢 Thomas H. Co rmen 的文章.粟粟家中有一个 R行C 列的巨型书架,书架的每一个位 ...

  9. 【刷题】BZOJ 1926 [Sdoi2010]粟粟的书架

    Description 幸福幼儿园 B29 班的粟粟是一个聪明机灵.乖巧可爱的小朋友,她的爱好是画画和读书,尤其喜欢 Thomas H. Cormen 的文章.粟粟家中有一个 R行C 列的巨型书架,书 ...

  10. 【BZOJ1926】【SDOI2010】粟粟的书架 [主席树]

    粟粟的书架 Time Limit: 30 Sec  Memory Limit: 552 MB[Submit][Status][Discuss] Description 幸福幼儿园 B29 班的粟粟是一 ...

随机推荐

  1. 几个常用的HTTP状态码

    200:客户端请求成功 302:临时跳转,跳转的地址通过Location指定 400:客户端请求有语法错误,不能被服务器识别 403:服务器收到请求,但是拒绝提供服务 404:请求的资源不存在 500 ...

  2. Ubuntu下libpcap安装步骤

    第一步,先安装GCC ,一般都会自动安装 sudo apt-get install build-essential 第二步,GNU M4可以从此处ftp.gnu.org/gnu/m4/ 下载 sudo ...

  3. java容器 Map Set List

    容器:在java中,如果有一个类专门用来存放其他类的对象,这个类就叫做容器,或者叫集合,集合就是将若干性质相同或者相近的类的对象组合在一起而形成一个整体. boolean add(Object obj ...

  4. 使用IneliJ IDEA 2016将Java Web项目导出为War包

    本文记录使用IDEA导出war包的过程以及碰到问题的解决办法 虽说现在改用IDEA进行开发了,但还是用eclipse打war包 -.囧 这样下去不是办法... 于是今天就试着使用IDEA进行打包. 项 ...

  5. IOException while loading persisted sessions: java.io.EOFException

    运行eclipse启动服务器的时候,出现了IOException while loading persisted sessions: java.io.EOFException报错.本以为是代码修改出现 ...

  6. 我用Django搭网站(3)-表单RSA加密

    之前开发项目时因为种种原因一直使用明文提交,表单直接明文提交非常不安全,只要稍加操作就能轻易获取用户的信息.在众里寻他千百度之后决定使用RSA加密方式,简单可靠. 项目准备 一.安装PyCrypto库 ...

  7. springcloud集成swaggerui做动态接口文档

    1.配置文件pom,一定要使用2.4以上的,2.4默认请求方式是json,会导致getmapping设置参数类型对对象时,swaggerui界面不能指定为其他类型,反正就是各种坑,不建议用 <d ...

  8. Python的特殊属性和魔法函数

    python中有很多以下划线开头和结尾的特殊属性和魔法函数,它们有着很重要的作用. 1.__doc__:说明性文档和信息,python自建,不需要我们定义. # -*- coding:utf- -*- ...

  9. ORB SLAM2 学习笔记

    cd ~/Documents/demos/ORB_SLAM2 ./Examples/RGB-D/rgbd_tum Vocabulary/ORBvoc.txt Examples/RGB-D/TUM1.y ...

  10. 数据存储 mongodb

    数据存储 mongodb from pymongo import MongoClient import os base_dir = os.getcwd() class MongoPipeline(ob ...