【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和手气君惊 ...
随机推荐
- iOS支付宝 9.x 版本首页效果
http://www.jianshu.com/p/7516eb852cca 支付宝 9.x 版本首页效果 对于新版支付宝首页的产品功能这里就不说什么了,一大堆人吐槽,我们只想要一个好好的支付工具,阿里 ...
- SpringBoot学习1:创建第一个SpringBoot项目
一.新建项目 二.打开项目的pom文件,在里面添加maven依赖 <!--springboot项目依赖的父项目--> <parent> <groupId>org.s ...
- oc描述器排序
int main(int argc, const char * argv[]) { @autoreleasepool { NSArray *array = @[CreateDict(@"王思 ...
- 20180911 关于页面加载顺序引发的JS的undefined/null错误
引用: 百度知道-HTML+JavaScript执行顺序问题 这是我在学习JS滚动播放图片案例意外遇到的一个问题,代码完成后console弹出错误警告: Uncaught TypeError: Can ...
- Vue 父组件传值到子组件
vue 父组件给子组件传值中 这里的AccessList就是子组件 如果 是静态传值的话直接 msg="xxx"就好 这里动态取值的话就 :msg=xxxxx ________ ...
- JZOJ 5462. 【NOIP2017提高A组冲刺11.8】好文章
5462. [NOIP2017提高A组冲刺11.8]好文章 (File IO): input:article.in output:article.out Time Limits: 1000 ms M ...
- 开源数据库中间件-MyCat
开源数据库中间件-MyCat产生的背景 如今随着互联网的发展,数据的量级也是成指数的增长,从GB到TB到PB.对数据的各种操作也是愈加的困难,传统的关系型数据库已经无法满足快速查询与插入数据的需求.这 ...
- 学习Pytbon第三天,用户输入
_username ='dream' #定义用户名 _password ='dream123'#定义用户密码username = input("username:")#请输入用户名 ...
- Girls and Boys-hdu 1068
Girls and Boys Time Limit: 20000/10000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) ...
- Fire Game FZU - 2150 (bfs)
Problem 2150 Fire Game Accept: 3772 Submit: 12868Time Limit: 1000 mSec Memory Limit : 32768 KB ...