洛咕 P2468 [SDOI2010]粟粟的书架
强行二合一啊。。。
前面直接二分最小值,二维前缀和。后面用主席树查最小值。注意要写\(nlogn\)。
// luogu-judger-enable-o2
#include<bits/stdc++.h>
#define il inline
#define vd void
typedef long long ll;
il int gi(){
int x=0,f=1;
char ch=getchar();
while(!isdigit(ch)){
if(ch=='-')f=-1;
ch=getchar();
}
while(isdigit(ch))x=x*10+ch-'0',ch=getchar();
return x*f;
}
namespace solve1{
int a[201][201];
int S1[201][201][1001],S2[201][201][1001];
il int query(int S[201][201][1001],int x0,int y0,int x1,int y1,int k){return S[x1][y1][k]-S[x1][y0-1][k]-S[x0-1][y1][k]+S[x0-1][y0-1][k];}
il vd main(int n,int m,int q){
for(int i=1;i<=n;++i)
for(int j=1;j<=m;++j){
a[i][j]=gi();
for(int k=1;k<=a[i][j];++k)S1[i][j][k]+=a[i][j],++S2[i][j][k];
}
for(int i=1;i<=1000;++i)
for(int j=1;j<=n;++j)
for(int k=1;k<=m;++k){
S1[j][k][i]+=S1[j][k-1][i]+S1[j-1][k][i]-S1[j-1][k-1][i];
S2[j][k][i]+=S2[j][k-1][i]+S2[j-1][k][i]-S2[j-1][k-1][i];
}
int x0,y0,x1,y1,t;
int l,r,mid;
while(q--){
x0=gi(),y0=gi(),x1=gi(),y1=gi(),t=gi();
l=0,r=1000;
while(l<r){
mid=(l+r)>>1;
if(query(S1,x0,y0,x1,y1,mid+1)>=t)l=mid+1;
else r=mid;
}
if(l==0)puts("Poor QLW");
else printf("%d\n",query(S2,x0,y0,x1,y1,l+1)+(t-query(S1,x0,y0,x1,y1,l+1)+l-1)/l);
}
}
}
namespace solve2{
#define mid ((l+r)>>1)
int rt[500010],ls[10000000],rs[10000000],sum[10000000],tot[10000000],id;
il vd build(int&x,int l,int r){
x=++id;if(l==r)return;
build(ls[x],l,mid),build(rs[x],mid+1,r);
}
il vd update(int&x,int l,int r,const int&p,const int&d){
++id;ls[id]=ls[x],rs[id]=rs[x],sum[id]=sum[x],tot[id]=tot[x];x=id;
sum[x]+=d,++tot[x];if(l==r)return;
if(p<=mid)update(ls[x],l,mid,p,d);
else update(rs[x],mid+1,r,p,d);
}
il int query(int xl,int xr,int l,int r,int t,int R){
if(l==r)return R+(t+l-1)/l;
if(sum[rs[xr]]-sum[rs[xl]]>=t)return query(rs[xl],rs[xr],mid+1,r,t,R);
else return query(ls[xl],ls[xr],l,mid,t-(sum[rs[xr]]-sum[rs[xl]]),R+(tot[rs[xr]]-tot[rs[xl]]));
}
#undef mid
int S[500010],a[500010];
il vd main(int n,int q){
for(int i=1;i<=n;++i)a[i]=gi(),S[i]=S[i-1]+a[i];
build(rt[0],1,1000);
for(int i=1;i<=n;++i)rt[i]=rt[i-1],update(rt[i],1,1000,a[i],a[i]);
int L,R,t;
while(q--){
gi(),L=gi(),gi(),R=gi(),t=gi();
if(S[R]-S[L-1]<t)puts("Poor QLW");
else printf("%d\n",query(rt[L-1],rt[R],1,1000,t,0));
}
}
}
int main(){
#ifndef ONLINE_JUDGE
freopen("2468.in","r",stdin);
freopen("2468.out","w",stdout);
#endif
int n=gi(),m=gi(),q=gi();
if(n!=1)solve1::main(n,m,q);
else solve2::main(m,q);
return 0;
}
洛咕 P2468 [SDOI2010]粟粟的书架的更多相关文章
- 洛咕 P2480 [SDOI2010]古代猪文
洛咕 P2480 [SDOI2010]古代猪文 题目是要求\(G^{\sum_{d|n}C^d_n}\). 用费马小定理\(G^{\sum_{d|n}C^d_n\text{mod 999911658} ...
- 洛谷P2468 [SDOI2010]粟粟的书架
来了来了,随便拽一道题写题解[大雾] 最近发现自己基础奇差于是开始复习之前学过的东西,正好主席树我几乎完全没学会,然后打开洛谷试炼场… 发现了这么一道二合一的题. 这道题其实分成两个部分,前50%是一 ...
- 洛谷P2468 [SDOI2010]粟粟的书架(二分答案 前缀和 主席树)
题意 题目链接 给出一个矩形,每个点都有一些值,每次询问一个子矩阵最少需要拿几个数才能构成给出的值 Sol 这题是真坑啊.. 首先出题人强行把两个题拼到了一起, 对于前$50 \%$的数据,考虑二分答 ...
- 洛谷P2468 SDOI 2010 粟粟的书架
题意:给你一个矩形书架,每个点是这本书的页数,每次询问(x1,y1)(x2,y2)这个小矩形里最少需要取几本书使得页数和等于Hi. 题解:小数据二位前缀和预处理+二分答案,大数据一行所以用主席树做,感 ...
- 洛咕 P2403 [SDOI2010]所驼门王的宝藏
简单tarjan. 一行的横天门如果暴力连边会被卡成平方,所以只要相邻两个横天门连双向边,再随便选一个横天门向整行连边即可.纵寰门同理.ziyou门直接map暴力连边. 然后tarjan直接dp. / ...
- 洛咕 P2447 [SDOI2010]外星千足虫
一开始以为是异或高斯消元,实际上是简单线性基. 直接往线性基里插入,直到线性基满了就解出来了. // luogu-judger-enable-o2 #include<bits/stdc++.h& ...
- 洛咕 P2467 [SDOI2010]地精部落
同波浪,简单dp. 高度从1到n插入山脉,设f[i][j][k]表示插入了i个山脉,组成了j段,边界上有k个山脉的方案数. 那么新插入的山脉只会:插入在边界上且自己是一段.插入在边界上且与最左边的段相 ...
- bzoj1926[Sdoi2010]粟粟的书架 二分 主席树
1926: [Sdoi2010]粟粟的书架 Time Limit: 30 Sec Memory Limit: 552 MBSubmit: 1064 Solved: 421[Submit][Stat ...
- bzoj 1926: [Sdoi2010]粟粟的书架 (主席树+二分)
链接:https://www.lydsy.com/JudgeOnline/problem.php?id=1926 题面; 1926: [Sdoi2010]粟粟的书架 Time Limit: 30 Se ...
随机推荐
- 使用AKLocationManager定位
使用AKLocationManager定位 https://github.com/ideaismobile/AKLocationManager 以下是使用情况: 是不是很简单呢,我们可以将它的步骤进一 ...
- [book] iOS 8 Swift Programming Cookbook
iOS 8 Swift Programming Cookbook 资源地址 http://pan.baidu.com/s/1c0hn1Gc 书籍介绍 源码截图 书籍截图
- Centos7 Nginx 443端口反向代理springboot项目
开发微信小程序需要部署项目到服务器.要求必须是443端口.但是一个443端口只能监听一个服务器.所以就出现了一个问题就是每次开发一个小程序就需要买一个服务器.觉得特别多余.后来查到了有一种方式就是通过 ...
- D:\hunting2014\小题目\字符串倒序
#include<stdio.h>#include<string.h> char *revert(char *str){ char temp; char *p = str; c ...
- Git学习文档——文件状态git status
1.已经跟踪的文件有三种状态 已跟踪的文件,即被纳入版本控制的文件,又分为未修改(unmodified).已修改(modified).已暂存(staged)三种状态. 如图: 当在工作目录中新加入一个 ...
- mybatis中使用in查询时的注意事项
1. 当查询的参数只有一个时 findByIds(List<Long> ids) 1.a 如果参数的类型是List, 则在使用时,collection属性要必须指定为 list < ...
- nginx反向代理跨域基本配置与常见误区
最近公司前后端分离,前端独立提供页面和静态服务很自然的就想到了用nginx去做静态服务器.同时由于跨域了,就想利用nginx的反向代理去处理一下跨域,但是在解决问题的同时,发现网上有些方案的确是存在一 ...
- JVM虚拟机20:内存区域详解(Eden Space、Survivor Space、Old Gen、Code Cache和Perm Gen)
1.内存区域划分 根据我们之前介绍的垃圾收集算法,限定商用虚拟机基本都采用分代收集算法进行垃圾回收.根据对象的生命周期的不同将内存划分为几块,然后根据各块的特点采用最适当的收集算法.大批对象死去.少量 ...
- virtualbox+vagrant学习-2(command cli)-24-Aliases别名
Aliases 别名的部分灵感来自Git自身的别名功能,它允许你创建自己的定制vagrant命令,从而使你的vagrant体验更简单.更容易.更熟悉. 别名可以在VAGRANT_HOME/ alias ...
- 【转】HBase架构解析
转载地址:http://www.blogjava.net/DLevin/archive/2015/08/22/426877.html HBase架构组成 HBase采用Master/Slave架构搭建 ...