【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的时候没做这道题,现在 ...
随机推荐
- shell脚本实例三
练习一:获得连通主机的ip和hostname1.脚本编写 vim checkhost.sh #!/bin/bashAuto_conn(){/usr/bin/expect << EOFse ...
- 下拉列表框DropDownList绑定Dictionary泛型类
DropDownList绑定Dictionary泛型类 定义一个Dictionary泛型类 /// <summary> /// 产品类型 /// </summary> ...
- DHL学习--<asp:literal
<asp:literal ID="ltlJS" runat="server"></asp:literal> 标签的Text属性可以放J ...
- ubuntu下mysql安装提供外网访问
修改配置文件 1. sudo apt-get install mysql-server #安装mysql服务器 2. sudo apt-get install mysql-client #安装mys ...
- for循环使用append问题
append添加到元素的时候,已存在的元素是移动而不是复制,使用了遍历,所以第一次是新增,后面都是移动前面新增的,最后当然就出现了只有最后一项有东西.解决办法:1.不要遍历,使用jQuery的类选择器 ...
- BZOJ1017: [JSOI2008]魔兽地图DotR【树形DP】【玄学】
Description DotR (Defense of the Robots) Allstars是一个风靡全球的魔兽地图,他的规则简单与同样流行的地图DotA (Defense of the Anc ...
- WPF 同一窗口内的多线程 UI(VisualTarget)
WPF 的 UI 逻辑只在同一个线程中,这是学习 WPF 开发中大家几乎都会学习到的经验.如果希望做不同线程的 UI,大家也会想到使用另一个窗口来实现,让每个窗口拥有自己的 UI 线程.然而,就不能让 ...
- CMDB
一.CMDB CMDB --Configuration Management Database 配置管理数据库, CMDB存储与管理企业IT架构中设备的各种配置信息,它与所有服务支持和服务交付流程都紧 ...
- functool.wraps and functools.partial
functools.partial 通过包装手法,允许我们 "重新定义" 函数签名. 通常是将函数的部分参数给固定下来, 从而形成一个输入参数更少的新函数. functool.w ...
- Gixy Nginx 配置分析工具
项目简介 Gixy 是一款用来分析 Nginx 配置的工具. Gixy 的主要目标是防止安全配置错误,并自动进行缺陷检测. 目前支持的 Python 版本是 2.7 和 3.5+ . 免责声明:Gix ...