【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的时候没做这道题,现在 ...
随机推荐
- C语言编程的两个工具:valgrind和core
检查内存泄漏: valgrind --leak-check=full ./ecox_rws_helper 来检查内存泄漏 程序崩溃看错误: ulimit -c unlimited 然后执行程序,会在当 ...
- c# 获取随机数字/字符/时间
using System; using System.Text; namespace HuaTong.General.Utility { /// <summary> /// 随机字符/数字 ...
- Oracle解决中文乱码
原因 经过一番查证,发现问题的源头不是出现在PLSQL上,而是出现在我们的Oracle上,由于我们的Oracle数据库里的字符集不支持中文导致的,既然知道了原因,就好办了,我们就配置我们的Oracle ...
- Java API访问ZK的权限控制
无权限访问结点 /** * 对于ZK的授权访问 * Created by liuhuichao on 2017/7/27. */ public class AutoSample { private s ...
- Oracle数据库中字段定义为Char类型,Hibernate用该字段进行动态绑定参数查询,获取不到结果的问题
一.问题背景 产生环境:oracle数据库,hibernate操作 定义了一个表 create table STORE_INFORMATION ( id CHAR(32) not null, name ...
- PPP of DDD
我是真够懒的了
- iOS-----GitHub上比较齐全的iOS 工具和App
Github-iOS 工具 和 App 系统基础库 Category/Util sstoolkit 一套Category类型的库,附带很多自定义控件 功能不错- BFKit 又一套Ca ...
- VS 工具箱 Dev控件显示
工具箱修复Dev控件显示 用VS2010新打开一个项目,居然发现工具箱里边没了Dev控件. 命令提示符定位到Dev控件的安装目录下的\Components\Tools文件夹下,执行如下命令 添加:To ...
- [转]redis服务器与客户端保活参数(tcp-keepalive)设置
最近使用redis的list做跨进程的消息队列,客户端使用的是redis-cplusplus-client.这个client库还是蛮好用的,提供了和redis命令行一致的接口,很方便. 使用过程中发现 ...
- js学习笔记知识点
AJAX用法安全限制JSONPCORS面向对象编程创建对象构造函数原型继承class继承 AJAX 用法 AJAX不是JavaScript的规范,它只是一个哥们“发明”的缩写:Asynchronous ...