粟粟的书架(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 ...
随机推荐
- c++ 软件下载 Dev cpp下载
下载地址: 链接: https://pan.baidu.com/s/1hsiWQPY 密码: bdpn
- 【前端_js】Chrome禁止缓存的方法
在前端开发中,浏览器缓存使得我们改了代码后页面不变,得经常手动清理缓存. 1.按如下操作即可禁用浏览器缓存, 这种方法基本能够做到完全禁止缓存,然而缺点是必须要将开发模式一直打开,占用屏幕空间.而且, ...
- Zabbix监控告警Lack of free swap space on Zabbix server解决办法
报错详情如下: 是因为Zabbix监控没有考虑虚拟主机的交换空间情况 解决办法修改配置 修改表达式内容:{Template OS Linux:system.swap.size[,pfree].last ...
- 破解studio 3T
方法一: 打开注册表:regedit 计算机\HKEY_CURRENT_USER\Software\JavaSoft\Prefs\3t\mongochef\enterprise 将里面得数据清零,又是 ...
- 与SVN相关的程序的调试问题【转】
解决eclipse中出现Resource is out of sync with the file system问题. 分析:有时候因为时间紧迫的原因,所以就没去管它,今天再次遇到它,实在看着不爽,所 ...
- Flask初学者:session操作
cookie:是一种保存数据的格式,也可以看成是保存数据的一个“盒子”,服务器返回cookie给浏览器(由服务器产生),由浏览器保存在本地,下次再访问此服务器时浏览器就会自动将此cookie一起发送给 ...
- Cube HDU - 1220(思维)
Cowl is good at solving math problems. One day a friend asked him such a question: You are given a c ...
- 线程、进程、队列、IO多路模型
操作系统工作原理介绍.线程.进程演化史.特点.区别.互斥锁.信号.事件.join.GIL.进程间通信.管道.队列.生产者消息者模型.异步模型.IO多路复用模型.select\poll\epoll 高性 ...
- Python中*和**的区别
Python中,(*)会把接收到的参数形成一个元组,而(**)则会把接收到的参数存入一个字典 我们可以看到,foo方法可以接收任意长度的参数,并把它们存入一个元组中 >>> def ...
- “帮你APP”团队冲刺2
1.整个项目预期的任务量 (任务量 = 所有工作的预期时间)和 目前已经花的时间 (所有记录的 ‘已经花费的时间’),还剩余的时间(所有工作的 ‘剩余时间’) : 所有工作的预期时间:88h 目前已经 ...