【BZOJ】1926: [Sdoi2010]粟粟的书架(暴力+主席树)
题目
传送门:QWQ
分析
两道题目
第一问暴力预处理
用$ a[i][j][k] $和$ s[i][j][k] $ 表示从$ (1,1) $ 到 $ (i,j) $ 这个矩形中比k大的数的个数和这些数的和。
对于询问我们二分k,得出答案(最后还要减掉一些值一样的东西 详见代码)
第二问主席树
r=1时只有一个数列,我们要求的是用多少数可以大于等于h
用主席树搞,询问时就像询问区间第k大时一样向左向右走,只不过要再套个二分。
代码
#include <bits/stdc++.h>
using namespace std;
const int maxn=;
int s[][][],a[][][],p[][];
int rt[maxn], newp, ls[], rs[], sum[], v[];
//int rt[maxn], newp, ls[10000100], rs[10000100], sum[10000100], v[10000100]; int r,c,m;
inline int in()
{
char c=getchar();int x=;
while (c<''||c>'') c=getchar();
while (c>=''&&c<='') x=x*+c-'',c=getchar();
return x;
}
void insert(int l,int r,int x,int &cur,int cur1){
cur=++newp;
ls[cur]=ls[cur1]; rs[cur]=rs[cur1];
sum[cur]=sum[cur1]+x; v[cur]=v[cur1]+;
if(l==r) return;
int mid=l+r>>;
if(x<=mid) /*ls[cur]=ls[cur1],*/insert(l,mid,x,ls[cur],ls[cur1]);
else /*rs[cur]=rs[cur1],*/insert(mid+,r,x,rs[cur],rs[cur1]);
}
int query(int x,int y,int h)
{
x=rt[x-];y=rt[y];
if(sum[y]-sum[x]<h) return -;
int l=,r=,ans=;
while(l<r){
int mid=(l+r)>>;
if(sum[rs[y]]-sum[rs[x]]<h){
ans+=v[rs[y]]-v[rs[x]]; h-=sum[rs[y]]-sum[rs[x]]; x=ls[x]; y=ls[y]; r=mid;
// printf("----- %d\n",v[rs[y]]-v[rs[x]]);
}
else {
l=mid+; x=rs[x]; y=rs[y];
}
}
ans+=(h+l-)/l;
return ans;
}
int main()
{
r=in();c=in();m=in();
if(r!=){
for(int i=;i<=r;i++)
for(int j=;j<=c;j++) p[i][j]=in();
for(int i=;i<=r;i++)
for(int j=;j<=c;j++)
for(int k=;k<=;k++)
{
a[i][j][k]=a[i-][j][k]+a[i][j-][k]-a[i-][j-][k];
s[i][j][k]=s[i-][j][k]+s[i][j-][k]-s[i-][j-][k];
if(p[i][j]>=k){
a[i][j][k]++; s[i][j][k]+=p[i][j];
}
}
while(m--){
int x1=in(),y1=in(),x2=in(),y2=in(),h=in();
int l=,r=,ans; x1--;y1--;
while(l+<r){
int mid=(l+r)>>;ans=s[x2][y2][mid]-s[x2][y1][mid]-s[x1][y2][mid]+s[x1][y1][mid];
if(ans>=h) l=mid; else r=mid;
}
int sum1=a[x2][y2][l]-a[x2][y1][l]-a[x1][y2][l]+a[x1][y1][l],
sum2=s[x2][y2][l]-s[x2][y1][l]-s[x1][y2][l]+s[x1][y1][l];
if(l==){puts("Poor QLW"); continue;}
else printf("%d\n",sum1-(sum2-h)/l);
}
}
else{
for(int i=;i<=c;i++){
int t=in();
insert(,,t,rt[i],rt[i-]);
}
while(m--){
int x1=in(),y1=in(),x2=in(),y2=in(),h=in();
int ans=query(y1,y2,h);
if(ans==-) puts("Poor QLW");
else printf("%d\n",ans);
}
}
return ;
}
【BZOJ】1926: [Sdoi2010]粟粟的书架(暴力+主席树)的更多相关文章
- 【BZOJ1926】粟粟的书架(主席树,前缀和)
[BZOJ1926]粟粟的书架(主席树,前缀和) 题面 Description 幸福幼儿园 B29 班的粟粟是一个聪明机灵.乖巧可爱的小朋友,她的爱好是画画和读书,尤其喜欢 Thomas H. Co ...
- 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: [Sdoi2010]粟粟的书架(主席树,二分答案)
BZOJ 1926: [Sdoi2010]粟粟的书架(主席树,二分答案) 题意 : 给你一个长为\(R\)宽为\(C\)的矩阵,第\(i\)行\(j\)列的数为\(P_{i,j}\). 有\(m\)次 ...
- bzoj1926[Sdoi2010]粟粟的书架 二分 主席树
1926: [Sdoi2010]粟粟的书架 Time Limit: 30 Sec Memory Limit: 552 MBSubmit: 1064 Solved: 421[Submit][Stat ...
- BZOJ1926 [Sdoi2010]粟粟的书架 【主席树 + 二分 + 前缀和】
题目 幸福幼儿园 B29 班的粟粟是一个聪明机灵.乖巧可爱的小朋友,她的爱好是画画和读书,尤其喜欢 Thomas H. Co rmen 的文章.粟粟家中有一个 R行C 列的巨型书架,书架的每一个位置都 ...
- Bzoj 2588: Spoj 10628. Count on a tree 主席树,离散化,可持久,倍增LCA
题目:http://www.lydsy.com/JudgeOnline/problem.php?id=2588 2588: Spoj 10628. Count on a tree Time Limit ...
- 【BZOJ 4556】[Tjoi2016&Heoi2016]字符串 SAM+二分+主席树
这道题市面上就两种法:一种是SA+二分+主席树,一种是SAM+二分+主席树(有不少人打线段树合并???)(除此之外还有一种利用炒鸡水的数据的暴力SA,贼快.....)(当时学SA的时候没做这道题,现在 ...
随机推荐
- Java虚拟机访问读写其他进程的数据--RandomAccessFile
RandomAccessFile 是Java输入/输出流体系中功能最丰富的文件内容访问类,它提供了众多的方法来访问文件内容,它既可以读取文件内容,也可以向文件输出数据.并且它支持“任意访问”的方式,程 ...
- easychm生成帮助文件时出现的目录导航乱码问题
将html生成帮助文件时出现乱码问题的主要原因是:文件编译格式的问题 (一般的网页都是utf-8格式的,将其改为GB2312就可以了):
- ASP.NET MVC3关于生成纯静态后如何不再走路由直接访问静态页面--收藏没测
要解决这个问题,我们需要先了解ASP.NET应用程序的生命周期,先看下面作者整理的一张图片: 从图中我们可以清楚的看到:通用IIS访问应用程序时,每次的单个页面URL访问时,都会先经过HttpAppl ...
- ADO Recordset 对象链接
http://baike.baidu.com/link?url=4Xdc46R8M5uj-BbOGaH761N5oDEYlGQJFeR2WbPwx1iQBusAUKU3qbWcHZCMmayatj9n ...
- ZK单机最简配置
修改zk home/conf下的zoo_sample.cfg,重新命名为zoo.cfg. 修改配置为: dataDir=/root/data/zookeeper-data clientPort=218 ...
- CS231n课程笔记翻译1:Python Numpy教程
译者注:本文智能单元首发,翻译自斯坦福CS231n课程笔记Python Numpy Tutorial,由课程教师Andrej Karpathy授权进行翻译.本篇教程由杜客翻译完成,Flood Sung ...
- 使用gmock白盒测试
提起白盒测试,很多程序员可能觉得就是个书上的概念,很多人写完代码根本没有具体的测试方案,自己觉得可行就提交了,其实这是个很危险的事情,毕竟出了bug,最后要加班的人还是你 ,因此做好白盒测试,100% ...
- js之瀑布流的实现
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- 【剑指offer】整数中1出现的次数,C++实现
原创博文,转载请注明出处!本题牛客网地址 博客文章索引地址 博客文章中代码的github地址 # 题目 # 思路 分析1在数字中出现的规律.设数字N = abcde ,其中abcde分别为十进制中各位 ...
- Linux运行环境搭建(一)——安装JDK
下载Linux版jdk 官网:http://www.oracle.com/technetwork/java/javase/downloads/index.html 解压并拷贝到指定目录 tar zxv ...