【Luogu】P2468粟粟的书架(主席树+前缀和)
我仿佛中了个爆零debuff
本题分成两部分,五十分用前缀和,f[i][j][k]表示(1,1)到(i,j)的矩形大于等于k的有多少个数(再记录页数和),查询时二分,另外的用主席树,类似方法二分求解,
细节很多需要注意。
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cctype>
#include<cstdlib>
#define maxr 220
#define maxc 550000
#define maxv 1000
using namespace std;
inline long long read(){
long long num=,f=;
char ch=getchar();
while(!isdigit(ch)){
if(ch=='-') f=-;
ch=getchar();
}
while(isdigit(ch)){
num=num*+ch-'';
ch=getchar();
}
return num*f;
} int d[maxr][maxr][maxv+],s[maxr][maxr][maxv+];
int tree[maxc*],root[maxc],ls[maxc*],rs[maxc*],tot,size[maxc*];
int q[maxr][maxr]; int r,c,m; int asks(int xa,int ya,int xb,int yb,int x){ return d[xb][yb][x]-d[xa-][yb][x]-d[xb][ya-][x]+d[xa-][ya-][x]; }
int askn(int xa,int ya,int xb,int yb,int x){ return s[xb][yb][x]-s[xa-][yb][x]-s[xb][ya-][x]+s[xa-][ya-][x]; } void solve1(){
for(int i=;i<=r;++i)
for(int j=;j<=c;++j) q[i][j]=read();
for(int k=;k<=maxv;++k)
for(int i=;i<=r;++i)
for(int j=;j<=c;++j){
bool flag=;
if(q[i][j]<k) flag=;;
d[i][j][k]=d[i-][j][k]+d[i][j-][k]-d[i-][j-][k]+(flag==?q[i][j]:);
s[i][j][k]=s[i-][j][k]+s[i][j-][k]-s[i-][j-][k]+(flag==?:);
}
while(m--){
int xa=read(),ya=read(),xb=read(),yb=read(),x=read();
if(asks(xa,ya,xb,yb,)<x){
printf("Poor QLW\n");
continue;
}
int lef=,rig=maxv,ans=-;
while(lef<=rig){
int mid=(lef+rig)>>;
//printf("%d>>>%d\n",asks(xa,ya,xb,yb,mid),mid);
if(asks(xa,ya,xb,yb,mid)>=x){
ans=mid;
lef=mid+;
}
else rig=mid-;
}
if(ans==-) printf("Poor QLW\n");
else printf("%d\n",askn(xa,ya,xb,yb,ans)-(asks(xa,ya,xb,yb,ans)-x)/ans);
}
} inline void update(int &o,int last,int lef,int rig,int p){
o=++tot; ls[o]=ls[last]; rs[o]=rs[last]; tree[o]=tree[last]+p; size[o]=size[last]+;
if(lef==rig) return;
int mid=(lef+rig)>>;
if(p<=mid) update(ls[o],ls[last],lef,mid,p);
else update(rs[o],rs[last],mid+,rig,p);
} void solve2(){
for(int i=;i<=c;++i){
int x=read();
update(root[i],root[i-],,maxv,x);
}
while(m--){
int xa=read(),ya=read(),xb=read(),yb=read(),x=read();
if(tree[root[yb]]-tree[root[ya-]]<x){
printf("Poor QLW\n");
continue;
}
register int lef=,rig=maxv,a=root[ya-],b=root[yb],ans=;
while(lef<rig){
register int mid=(lef+rig)>>;
if(tree[rs[b]]-tree[rs[a]]>=x){
lef=mid+;
a=rs[a]; b=rs[b];
}
else{
x-=tree[rs[b]]-tree[rs[a]];
ans+=size[rs[b]]-size[rs[a]];
rig=mid;
a=ls[a]; b=ls[b];
}
}
ans+=(x+lef-)/lef;
printf("%d\n",ans);
}
return;
} int main(){
r=read(),c=read(),m=read();
if(r!=) solve1();
else solve2();
return ;
}
【Luogu】P2468粟粟的书架(主席树+前缀和)的更多相关文章
- [Luogu 3701] 「伪模板」主席树
[Luogu 3701] 「伪模板」主席树 这是一道网络流,不是主席树,不是什么数据结构,而是网络流. 题目背景及描述都非常的暴力,以至于 Capella 在做此题的过程中不禁感到生命流逝. S 向 ...
- bzoj 1926: [Sdoi2010]粟粟的书架 (主席树+二分)
链接:https://www.lydsy.com/JudgeOnline/problem.php?id=1926 题面; 1926: [Sdoi2010]粟粟的书架 Time Limit: 30 Se ...
- 【BZOJ1926】【SDOI2010】粟粟的书架 [主席树]
粟粟的书架 Time Limit: 30 Sec Memory Limit: 552 MB[Submit][Status][Discuss] Description 幸福幼儿园 B29 班的粟粟是一 ...
- [SDOI2010]粟粟的书架 [主席树]
[SDOI2010]粟粟的书架 考虑暴力怎么做 显然是提取出来 (x2-x1+1)*(y2-y1+1) 个数字拿出来 然后从大到小排序 然后就可以按次取数了- 然而接下来看数据范围 \(50\%\ r ...
- BZOJ 1926: [Sdoi2010]粟粟的书架(主席树,二分答案)
BZOJ 1926: [Sdoi2010]粟粟的书架(主席树,二分答案) 题意 : 给你一个长为\(R\)宽为\(C\)的矩阵,第\(i\)行\(j\)列的数为\(P_{i,j}\). 有\(m\)次 ...
- Luogu P2468 [SDOI2010]粟粟的书架
一道二合一的题目.两部分思维难度都不太高,但是也都很巧妙.尤其是主席树的\(50\)分,由于本人初学主席树,所以没有见过主席树上二分的套路,就被小小的卡了一下.. \(n <= 200\) \( ...
- 「Luogu P2468 [SDOI2010]粟粟的书架」
这道题分为两个部分 Part1 前置芝士 前缀和(后缀和,二维前缀和):可以预处理一下数据. 二分查找:可以在较短的时间内找出答案. 具体做法 可以发现\(R,C\)不大,只有\(200\),于是可以 ...
- Luogu Dynamic Ranking (带修改的主席树)
题目大意: 网址:https://www.luogu.org/problemnew/show/2617 给定一个序列a[1].a[2].....a[N],完成M个操作,操作有两种: [1]Q i j ...
- [Luogu] P3701 「伪模板」主席树
题目背景 byx和手气君都非常都非常喜欢种树.有一天,他们得到了两颗奇怪的树种,于是各自取了一颗回家种树,并约定几年后比一比谁种出来的树更加牛x. 题目描述 很快,这棵树就开花结果了.byx和手气君惊 ...
随机推荐
- 管理员必备的几个Linux系统监控工具
需要监控Linux服务器系统性能吗?尝试下面这些系统内置或附件的工具吧.大多数Linux发行版本都装备了大量的监控工具.这些工具提供了能用作取得相关信息和系统活动的量度指标.你能使用这些工具发现造成性 ...
- C#事件与接口编程实例
很多初学c#的朋友对于事件与接口感到迷惑不解,不明白它们之间的关系,下面我就用实例来简单的分析讲解一下. 事件,用event修饰符来代表一个事件,我们要创建一个C#事件必须按以下顺序来扫行: 1,创建 ...
- GMap.Net解决方案之在WinForm和WPF中使用GMap.Net地图插件的开发
在做地理位置相关的开发时,总是面临高额地图引擎费用让大部分用户望而却步,加之地图数据又是天价,那么GMap.NET就是首选了,它本身就是开源免费,服务器可以在本地缓存,以后访问时就可以直接访问. 可以 ...
- 1045: [HAOI2008] 糖果传递
Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 4897 Solved: 2457[Submit][Status][Discuss] Descript ...
- 自动化测试 ubuntu多设备连接不识别
环境: ubuntu系统 usb2.0 16个口集线器 遇到问题: 连接手机到第11台设备时出现adb devices不显示的现象导致无法通过adb操作 问题排除思路; 1.通过dmesg查看设备连接 ...
- 第六篇:python中numpy.zeros(np.zeros)的使用方法
用法:zeros(shape, dtype=float, order='C') 返回:返回来一个给定形状和类型的用0填充的数组: 参数:shape:形状 dtype:数据类型,可选参数,默认numpy ...
- 十四、MySQL UPDATE 查询
MySQL UPDATE 查询 如果我们需要修改或更新 MySQL 中的数据,我们可以使用 SQL UPDATE 命令来操作.. 语法 以下是 UPDATE 命令修改 MySQL 数据表数据的通用 S ...
- Bank Simulation Program银行管理系统C++ :)
设计并实现简单的银行存取款系统,系统主界面包括登录和注册两个选项,选择登录,提示用户输入银行帐号和密码,验证通过后进入主界面,主界面包括:存款.取款.查询余额.历史记录.修改密码等功能.注册功能让用户 ...
- Python知识点入门笔记——特色数据类型(函数)
函数的定义 def 函数名(形式参数): 函数体 [return 返回值] def是系统的关键字. 如果是自定义函数,函数名要复合变量命名规则,并且不能是系统关键字(jupyter中,打出系统关键字是 ...
- bootstrap-图片样式记录
//三种形状<img src=”img/pic.png” alt=”图片” class=”img-rounded” /><img src=”img/pic.png” alt=”图片” ...