粟粟的书架(bzoj 1926)
Description
Input
Output
Sample Input
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
Sample Output
15
2
Poor QLW
9
1
3
HINT
/*
一道二合一的题目。
对于前50%,a[i][j][k]表示矩阵的前i,j格大于k的数的个数,b[i][j][k]表示矩阵的前i,j格大于k的数的总和,预处理出来之后,二分答案。
对于后50%,很明显可以二分答案k,然后转成判断x~y中前k大的总和是否大于h,然后主席树维护一下。
*/
#include<cstdio>
#include<iostream>
#define N 210
#define M 500010
using namespace std;
int a[N][N][],b[N][N][],n,m,Q;
int root[M],Sum[M],cnt;
struct node{int size,lc,rc,sum;}t[M*];
void work1(){
for(int i=;i<=n;i++)
for(int j=;j<=m;j++){
int x;scanf("%d",&x);
for(int k=;k<=;k++){
a[i][j][k]=a[i-][j][k]+a[i][j-][k]-a[i-][j-][k];
b[i][j][k]=b[i-][j][k]+b[i][j-][k]-b[i-][j-][k];
if(x>=k) a[i][j][k]++,b[i][j][k]+=x;
}
}
int x1,y1,x2,y2,h;
while(Q--){
scanf("%d%d%d%d%d",&x1,&y1,&x2,&y2,&h);
int l=,r=,ans=;
while(l<=r){
int mid=l+r>>;
if(b[x2][y2][mid]-b[x1-][y2][mid]-b[x2][y1-][mid]+b[x1-][y1-][mid]>=h)
l=mid+,ans=mid;
else r=mid-;
}
if(ans==) printf("Poor QLW\n");
else {
int sum1=b[x1-][y1-][ans]+b[x2][y2][ans]-b[x2][y1-][ans]-b[x1-][y2][ans]-h;
int sum2=a[x1-][y1-][ans]+a[x2][y2][ans]-a[x2][y1-][ans]-a[x1-][y2][ans];
printf("%d\n",sum2-sum1/ans);
}
}
}
void add(int last,int &k,int l,int r,int x){
k=++cnt;
t[k].size=t[last].size+;
t[k].sum=t[last].sum+x;
t[k].lc=t[last].lc;
t[k].rc=t[last].rc;
if(l==r) return;
int mid=l+r>>;
if(x<=mid) add(t[last].lc,t[k].lc,l,mid,x);
else add(t[last].rc,t[k].rc,mid+,r,x);
}
int query(int x,int y,int l,int r,int k){
if(l==r) return (t[y].sum-t[x].sum)/(t[y].size-t[x].size)*k;
int mid=l+r>>,tot=t[t[y].lc].size-t[t[x].lc].size;
if(k<=tot) return query(t[x].lc,t[y].lc,l,mid,k);
else return t[t[y].lc].sum-t[t[x].lc].sum+query(t[x].rc,t[y].rc,mid+,r,k-tot);
}
void work2(){
for(int i=;i<=m;i++){
int x;scanf("%d",&x);
add(root[i-],root[i],,,x);
Sum[i]=Sum[i-]+x;
}
int x1,y1,x2,y2,h;
while(Q--){
scanf("%d%d%d%d%d",&x1,&y1,&x2,&y2,&h);
if(Sum[y2]-Sum[y1-]<h) {printf("Poor QLW\n");continue;}
int l=,r=y2-y1+,ans=r;
while(l<=r){
int mid=l+r>>,k=y2-y1+-mid;
if(Sum[y2]-Sum[y1-]-query(root[y1-],root[y2],,,k)>=h) r=mid-,ans=mid-;
else l=mid+;
}
printf("%d\n",ans);
}
}
int main(){
scanf("%d%d%d",&n,&m,&Q);
if(n<=&&m<=) work1();
else work2();
return ;
}
粟粟的书架(bzoj 1926)的更多相关文章
- AC日记——[Sdoi2010]粟粟的书架 bzoj 1926
1926 思路: 主席树+二分水题: 代码: #include <bits/stdc++.h> using namespace std; #define maxn 500005 #defi ...
- bzoj 1926: [Sdoi2010]粟粟的书架 (主席树+二分)
链接:https://www.lydsy.com/JudgeOnline/problem.php?id=1926 题面; 1926: [Sdoi2010]粟粟的书架 Time Limit: 30 Se ...
- Bzoj 1926: [Sdoi2010]粟粟的书架(二分答案+乱搞+主席树)
1926: [Sdoi2010]粟粟的书架 Time Limit: 30 Sec Memory Limit: 552 MB Description 幸福幼儿园 B29 班的粟粟是一个聪明机灵.乖巧可爱 ...
- 【刷题】BZOJ 1926 [Sdoi2010]粟粟的书架
Description 幸福幼儿园 B29 班的粟粟是一个聪明机灵.乖巧可爱的小朋友,她的爱好是画画和读书,尤其喜欢 Thomas H. Cormen 的文章.粟粟家中有一个 R行C 列的巨型书架,书 ...
- 【BZOJ-1926】粟粟的书架 二分 + 前缀和 + 主席树
1926: [Sdoi2010]粟粟的书架 Time Limit: 30 Sec Memory Limit: 552 MBSubmit: 616 Solved: 238[Submit][Statu ...
- [BZOJ1926][SDOI2010]粟粟的书架
BZOJ Luogu Description 幸福幼儿园 B29 班的粟粟是一个聪明机灵.乖巧可爱的小朋友,她的爱好是画画和读书,尤其喜欢 Thomas H. Cormen 的文章.粟粟家中有一个 R ...
- bzoj1926[Sdoi2010]粟粟的书架 二分 主席树
1926: [Sdoi2010]粟粟的书架 Time Limit: 30 Sec Memory Limit: 552 MBSubmit: 1064 Solved: 421[Submit][Stat ...
- BZOJ1926:[SDOI2010]粟粟的书架——题解
http://www.lydsy.com/JudgeOnline/problem.php?id=1926 https://www.luogu.org/problemnew/show/P2468 幸福幼 ...
- 【BZOJ1926】粟粟的书架(主席树,前缀和)
[BZOJ1926]粟粟的书架(主席树,前缀和) 题面 Description 幸福幼儿园 B29 班的粟粟是一个聪明机灵.乖巧可爱的小朋友,她的爱好是画画和读书,尤其喜欢 Thomas H. Co ...
随机推荐
- es6之Object扩展及内部属性的总结
对象扩展: 1.Object.is(A,B) :比较两个值是否相等,取代===运算:只要值相等代表相等:其中NAN和NAN相等:+0和-0不相等: 2.Object.assign(target,sou ...
- Dart Socket 与Java Socket连接
------------------------------------------------------------- Dart SocketClient----------------- ...
- linux下安装redis和使用
http://www.linuxidc.com/Linux/2014-05/101979.htm
- Microsoft .Net framework 4.0出现 安装不成功,错误代码0x80240037 的解决方法
,安装Microsoft .Net framework 时出现 解决方法:用QQ管家 之后 以上就解决了
- python之质数
质数(prime number)又称素数,有无限个 质数定义为在大于1的自然数中,除了1和它本身以外不再有其他因数. 示例: num=[]; i=2 for i in range(2,100): j= ...
- 精读《sqorn 源码》
1 引言 前端精读<手写 SQL 编译器系列> 介绍了如何利用 SQL 生成语法树,而还有一些库的作用是根据语法树生成 SQL 语句. 除此之外,还有一种库,是根据编程语言生成 SQL.s ...
- (转)规划从 OpenGL ES 2.0 到 Direct3D 的移植
如果你移植 iOS 或 Android 平台中的游戏,那么你可能需要在 OpenGL ES 2.0 方面进行大量投资.如果你准备将你的图形管道代码库移动到 Direct3D 11 和 Windows ...
- JavaScriptDate(日期)
如何使用Date()方法获取当日的日期. getFullYear(): 使用getFullYear()获取年份. getTime(): getTime()返回1970年1月1日至今的毫秒数. setF ...
- python 2.7版本解决TypeError: 'encoding' is an invalid keyword argument for this function
今天在用yaml处理数据时,由于yaml.load可接收一个byte字符串,unicode字符串,打开的二进制文件或文本文件对象,但字节字符串和文件必须是utf-8,utf-16-be或utf-16- ...
- Python9-前端基础知识-day47
web开发本质: 1.浏览器输入网址回车都发生了什么? 1.浏览器给服务端发送一个消息 2.服务端拿到消息 3.服务端返回消息 4.浏览器展示页面C/S架构----B/S架构客户端和服务端 消息的格式 ...