【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的时候没做这道题,现在 ...
随机推荐
- (转) MapReduce Design Patterns(chapter 2 (part 1))(二)
CHAPTER 2 .Summarization Patterns 随着每天都有更多的数据加载进系统,数据量变得很庞大.这一章专注于对你的数据顶层的,概括性意见的设计模式,从而使你能扩展思路,但可能 ...
- flowable DmnEngine和DmnEngineConfiguration
一.DmnEngineConfiguration创建实例 DmnEngineConfiguration 提供了7个公共的静态方法,用于创建自身实例. 其中5个是使用spring的机制加载配置文件. 另 ...
- python3精简笔记(二)——函数
函数 下面的地址可以查看函数: https://docs.python.org/3/library/functions.html 也可以在交互式命令行通过help()查看函数的帮助信息. 如: > ...
- 打开U盘时出现“使用驱动器 X:中的光盘之前需要将其格式化。”字样
今天打开U盘时出现如下情况,吓死宝宝了,格式化!!!里面还有好多数据嘞,幸好最终找到方法解决了这个问题. 解决方法: 1.下载DiskGenius软件 2.工具->搜索已丢失分区(重建分区):不 ...
- iOS:Core Data 中的简单ORM
我们首先在xcdatamodel文件中设计我们的数据库:例如我建立一个Data的实体,里面有一个String类型的属性name以及一个Integer类型的num: 然后选中Data,添加文件,选择NS ...
- slack 团队协作平台
/**************************************************************************** * slack 团队协作平台 * 说明: * ...
- 每天一个linux命令(性能、优化):【转载】free命令
free命令可以显示Linux系统中空闲的.已用的物理内存及swap内存,及被内核使用的buffer.在Linux系统监控的工具中,free命令是最经常使用的命令之一. 1.命令格式: free [参 ...
- 每天一个linux命令(文件操作):【转载】which命令
我们经常在linux要查找某个文件,但不知道放在哪里了,可以使用下面的一些命令来搜索: which 查看可执行文件的位置. whereis 查看文件的位置. ...
- ResultSet.TYPE_SCROLL_SENSITIVE到底发生了什么?
转自:https://blog.csdn.net/axman/article/details/3984103 这个问题我在几年前说过,但今天再次从CSDN上看到有人问这个问题,可以看出,真正懂这个问题 ...
- 接口测试框架——第一篇-大框架和setting.py常量文件
基础知识已经准备的差不多了,今天开始我们就开始写我们的接口测试框架,框架结构已经说过了: 今天我们先完善需要的常量,也就是setting.py文件中的内容,代码如下: # coding: utf-8 ...