bzoj 1926: [Sdoi2010]粟粟的书架 (主席树+二分)
链接:https://www.lydsy.com/JudgeOnline/problem.php?id=1926
题面;
1926: [Sdoi2010]粟粟的书架
Time Limit: 30 Sec Memory Limit: 512 MB
Submit: 1669 Solved: 618
[Submit][Status][Discuss]
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
#include<bits/stdc++.h>
using namespace std;
const int M = 5e5+;
int ls[M*],rs[M*],sum[M*],idx,rt[M],num[M*],n,m;
int mp[][],s[][][],t[][][],v[];
void update(int old,int &k,int p,int c,int l,int r){
k = ++idx;
ls[k] = ls[old]; rs[k] = rs[old];
sum[k] = sum[old] + c;
num[k] = num[old] + ;
if(l == r) return ;
int mid = (l + r) >> ;
if(p <= mid) update(ls[old],ls[k],p,c,l,mid);
else update(rs[old],rs[k],p,c,mid+,r);
} int query(int old,int k,int L,int R,int l,int r){
if(L <= l&&R >= r){
return sum[k] - sum[old];
}
int mid = (l + r) >> ;
int ret = ;
if(L <= mid) ret += query(ls[old],ls[k],L,R,l,mid);
if(R > mid) ret += query(rs[old],rs[k],L,R,mid+,r);
return ret;
} int ask(int old,int k,int L,int R,int l,int r){
if(L <= l&&R >= r){
return num[k] - num[old];
}
int mid = (l + r) >> ;
int ret = ;
if(L <= mid) ret += ask(ls[old],ls[k],L,R,l,mid);
if(R > mid) ret += ask(rs[old],rs[k],L,R,mid+,r);
return ret;
} void init(){
for(int i = ;i <= n;i ++){
for(int j = ;j <= m;j ++){
for(int k = ;k <= ;k ++){
t[i][j][k] = t[i-][j][k]+t[i][j-][k]-t[i-][j-][k];
}
t[i][j][mp[i][j]] += ;
}
}
for(int i = ;i <= n;i ++){
for(int j = ;j <= m;j ++){
for(int k = ;k >= ;k --){
s[i][j][k] = s[i][j][k+]+t[i][j][k]*k;
t[i][j][k] += t[i][j][k+];
}
}
}
} int getsum(int k,int x1,int y1,int x2,int y2){
//cout<<s[x2][y2][k]<<" "<<s[x1-1][y1-1][k]<<" "<<s[x1-1][y2][k]<<endl;
int num = s[x2][y2][k] + s[x1-][y1-][k] - s[x1-][y2][k] - s[x2][y1-][k];
return num;
} int getnum(int k,int x1,int y1,int x2,int y2){
int num = t[x2][y2][k] + t[x1-][y1-][k] - t[x1-][y2][k] - t[x2][y1-][k];
return num;
} int main()
{
int p,x1,x2,y1,y2,h;
scanf("%d%d%d",&n,&m,&p);
for(int i = ;i <= n;i ++){
for(int j = ;j <= m;j ++){
cin>>mp[i][j],v[mp[i][j]]++;
}
}
if(n <= &&m <= ){
init();
for(int i = ;i <= p;i ++){
scanf("%d%d%d%d%d",&x1,&y1,&x2,&y2,&h);
int l = ,r = ,ans = ,id=-;
while(l <= r){
int mid = (l + r) >> ;
int num = getsum(mid,x1,y1,x2,y2);
if(num >= h){
id = mid,ans = num,l = mid+;
}
else r = mid-;
}
if(id == -){
printf("Poor QLW\n"); continue;
}
int cur = getnum(id,x1,y1,x2,y2);
while(ans-id>=h){
ans-=id; cur--;
}
printf("%d\n",cur);
}
}
else{
for(int i = ;i <= m;i ++)
update(rt[i-],rt[i],mp[][i],mp[][i],,M);
for(int i = ;i <= p;i ++){
scanf("%d%d%d%d%d",&x1,&y1,&x2,&y2,&h);
int l = ,r = ,ans = ,id = -;
while(l <= r){
int mid = (l + r) >> ;
int num = query(rt[y1-],rt[y2],mid,M,,M);
if(num >= h){
id = mid,ans = num,l = mid+;
}
else r = mid-;
}
if(id == -){
printf("Poor QLW\n"); continue;
}
int cur = ask(rt[y1-],rt[y2],id,M,,M);
while(ans-id>=h){
ans-=id; cur--;
}
printf("%d\n",cur);
}
}
return ;
}
bzoj 1926: [Sdoi2010]粟粟的书架 (主席树+二分)的更多相关文章
- BZOJ 1926: [Sdoi2010]粟粟的书架(主席树,二分答案)
BZOJ 1926: [Sdoi2010]粟粟的书架(主席树,二分答案) 题意 : 给你一个长为\(R\)宽为\(C\)的矩阵,第\(i\)行\(j\)列的数为\(P_{i,j}\). 有\(m\)次 ...
- BZOJ.1926.[SDOI2010]粟粟的书架(前缀和 主席树 二分)
题目链接 题意: 在给定矩形区域内找出最少的数,满足和>=k.输出数的个数.两种数据范围. 0~50 注意到(真没注意到...)P[i,j]<=1000,我们可以利用前缀和预处理. num ...
- 2018湘潭邀请赛C题(主席树+二分)
题目地址:https://www.icpc.camp/contests/6CP5W4knRaIRgU 比赛的时候知道这题是用主席树+二分,可是当时没有学主席树,就连有模板都不敢套,因为代码实在是太长了 ...
- 计蒜客 38229.Distance on the tree-1.树链剖分(边权)+可持久化线段树(区间小于等于k的数的个数)+离散化+离线处理 or 2.树上第k大(主席树)+二分+离散化+在线查询 (The Preliminary Contest for ICPC China Nanchang National Invitational 南昌邀请赛网络赛)
Distance on the tree DSM(Data Structure Master) once learned about tree when he was preparing for NO ...
- HDU - 4866 主席树 二分
题意:在x轴\([1,X]\)内的上空分布有n个占据空间\([L_i,R_i]\),高度\(D_i\)的线段,射中线段的得分为其高度,每次询问从x轴的\(x\)往上空射的最近k个线段的总得分,具体得分 ...
- POJ 6621: K-th Closest Distance(主席树 + 二分)
K-th Closest Distance Time Limit: 20000/15000 MS (Java/Others) Memory Limit: 524288/524288 K (Jav ...
- HDU6621 K-th Closest Distance HDU2019多校训练第四场 1008(主席树+二分)
HDU6621 K-th Closest Distance HDU2019多校训练第四场 1008(主席树+二分) 传送门:http://acm.hdu.edu.cn/showproblem.php? ...
- 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 列的巨型书架,书 ...
随机推荐
- 第一章 CLR执行模型
发现看过好几遍还是会忘记,因水平有限理解的不是很到位.欢迎各位大神及时指正. CLR执行模型 1.1编译器将源代码编译成托管模块 托管模块:是标准的windows可移植执行体文件(PE32(32位机器 ...
- SpringCloud-Eureka注册与发现
这两年可以说微服务是热词,也是新领域,学习的成本也较高,基础东西太多比如什么Dubbo,zookeeper,Springboot等等.Dubbo也是实现服务治理又是阿里出的一套开源RPC框架,但是Sp ...
- Yii2设计模式——Yii2中用到哪些设计模式?
"Yii2设计模式"包含了两个方面的内容:1.设计模式,2.Yii2框架. <设计模式>一书虽然以JAVA语言来表达设计模式的思想,但是设计模式远不限制于某一种特定的语 ...
- 超大文本文件浏览器Snaptext,支持不限制大小的文本文件浏览
文本文件超过1G就很少有软件可以打开了,超过10G就只有有限的几个可以打开了,那20G.30G.100G呢? Snaptext超大文本浏览器,应该是世界上最快速的文本文件浏览器,它支持基本不限制大小的 ...
- 原 js实现数据持久化
在写js事件时,常常遇到点击一个事件,然后在若干时间以后需要知道最近一次点击的事件的结点.比如这里: 我点击树节点1,再点击tab2,然后我再来回切换tab,假如最后一次点击tab时在tab2上,这时 ...
- MongoDB中数组类型相关的操作
概述 在MongoDB的模式中,我们经常将一些数据存储到数组类型中,即我们常见的嵌套模式设计的一种实现方式.数组的这种设计实现方式在关系数据库中是没有或者说不常见的.所以,通过本文我们来梳理一下Mon ...
- go语言打造p2p网络
传送门: 柏链项目学院 就像1000个人眼中有1000个哈姆雷特一样,每个人眼中的区块链也是不一样的!作为技术人员眼中的区块链就是将各种技术的融合,包括密码学,p2p网络,分布式共识机制以及博弈论等. ...
- yum 安装 python-pip 失败解决方法
这个包在EPEL源里,要添加EPEL源才可以.然后按博客里说的方法添加,执行以下命令: sudo rpm -ivh epel-release* 第一种方式:由于epel在禁用列表里需要另外加参数yum ...
- element-ui笔记
1.el-dialog的关闭异常 在confirm按钮事件中,我们需要对业务参数进行校验,但是校验未通过,return false了,仍然关闭了弹窗. 原因:cancel按钮的click直接将弹窗的s ...
- 4.16 反射和jvm