强行二合一啊。。。

前面直接二分最小值,二维前缀和。后面用主席树查最小值。注意要写\(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]粟粟的书架的更多相关文章

  1. 洛咕 P2480 [SDOI2010]古代猪文

    洛咕 P2480 [SDOI2010]古代猪文 题目是要求\(G^{\sum_{d|n}C^d_n}\). 用费马小定理\(G^{\sum_{d|n}C^d_n\text{mod 999911658} ...

  2. 洛谷P2468 [SDOI2010]粟粟的书架

    来了来了,随便拽一道题写题解[大雾] 最近发现自己基础奇差于是开始复习之前学过的东西,正好主席树我几乎完全没学会,然后打开洛谷试炼场… 发现了这么一道二合一的题. 这道题其实分成两个部分,前50%是一 ...

  3. 洛谷P2468 [SDOI2010]粟粟的书架(二分答案 前缀和 主席树)

    题意 题目链接 给出一个矩形,每个点都有一些值,每次询问一个子矩阵最少需要拿几个数才能构成给出的值 Sol 这题是真坑啊.. 首先出题人强行把两个题拼到了一起, 对于前$50 \%$的数据,考虑二分答 ...

  4. 洛谷P2468 SDOI 2010 粟粟的书架

    题意:给你一个矩形书架,每个点是这本书的页数,每次询问(x1,y1)(x2,y2)这个小矩形里最少需要取几本书使得页数和等于Hi. 题解:小数据二位前缀和预处理+二分答案,大数据一行所以用主席树做,感 ...

  5. 洛咕 P2403 [SDOI2010]所驼门王的宝藏

    简单tarjan. 一行的横天门如果暴力连边会被卡成平方,所以只要相邻两个横天门连双向边,再随便选一个横天门向整行连边即可.纵寰门同理.ziyou门直接map暴力连边. 然后tarjan直接dp. / ...

  6. 洛咕 P2447 [SDOI2010]外星千足虫

    一开始以为是异或高斯消元,实际上是简单线性基. 直接往线性基里插入,直到线性基满了就解出来了. // luogu-judger-enable-o2 #include<bits/stdc++.h& ...

  7. 洛咕 P2467 [SDOI2010]地精部落

    同波浪,简单dp. 高度从1到n插入山脉,设f[i][j][k]表示插入了i个山脉,组成了j段,边界上有k个山脉的方案数. 那么新插入的山脉只会:插入在边界上且自己是一段.插入在边界上且与最左边的段相 ...

  8. bzoj1926[Sdoi2010]粟粟的书架 二分 主席树

    1926: [Sdoi2010]粟粟的书架 Time Limit: 30 Sec  Memory Limit: 552 MBSubmit: 1064  Solved: 421[Submit][Stat ...

  9. bzoj 1926: [Sdoi2010]粟粟的书架 (主席树+二分)

    链接:https://www.lydsy.com/JudgeOnline/problem.php?id=1926 题面; 1926: [Sdoi2010]粟粟的书架 Time Limit: 30 Se ...

随机推荐

  1. IP地址分类及CIDR划分方法

    IP地址的分类和表示有三种形式,1.分类的IP地址.2.子网划分.3.无分类编址CIDR 1.分类的IP地址 IP地址:: = {<网络号>,<主机号>} 不同的网络号和主机号 ...

  2. 1260. [CQOI2007]涂色【区间DP】

    Description 假设你有一条长度为5的木版,初始时没有涂过任何颜色.你希望把它的5个单位长度分别涂上红.绿.蓝.绿.红色,用一个长度为5的字符串表示这个目标:RGBGR. 每次你可以把一段连续 ...

  3. 【洛谷】【线段树】P1886 滑动窗口

    [题目描述:] 现在有一堆数字共N个数字(N<=10^6),以及一个大小为k的窗口.现在这个从左边开始向右滑动,每次滑动一个单位,求出每次滑动后窗口中的最大值和最小值. [输入格式:] 输入一共 ...

  4. 【openjudge】【字符串+模拟】1777:文件结构“图”

    [题目传送门:]戳 [描述:] 在计算机上看到文件系统的结构通常很有用.Microsoft Windows上面的"explorer"程序就是这样的一个例子.但是在有图形界面之前,没 ...

  5. RAC with asm on AIX, ORA-01114 error,with "gipcretAuthFail (22) " in ocssd.log

    I/O Errors in Alert log with ORA-29701, with "gipcWait failed with 16" in trace (文档 ID 149 ...

  6. 【JavaScript】赛码网前端笔试本地环境搭建

    参考:https://hoofoo.me/article/2017-04-11/%E8%B5%9B%E7%A0%81%E7%BD%91%E5%89%8D%E7%AB%AF%E7%AC%94%E8%AF ...

  7. oracle之修改/忘记用户密码

    一.修改/忘记用户密码: ## 修改oracle用户名和密码 sqlplus /nolog ## DBA角色进入 conn /as sysdba; ## 查看用户列表 select username ...

  8. svn 查找指定文件和后缀变化

    有时候需要批量查找一些包含特定关键字文件名和后缀的文件,先把所有变化文件通多svn diff命令 输出到一个文件,然后使用如下命令: grep -i 'data*.xml' change.txt |a ...

  9. 平台+插件软件设计思想及基于COM的原型实现

    引言:我们已经习惯于一个人独立进行软件开发,每个人都使用自己的风格进行程序设计,但随着工程项目变大或者是对时间要求比较紧时,就需要几个人,十几个人,甚至是上百个人协作进行软件开发与设计,这时一个比较棘 ...

  10. PHP的Reflection反射机制

    更多内容推荐微信公众号,欢迎关注: 原文地址: http://www.nowamagic.net/php/php_Reflection.php PHP5添加了一项新的功能:Reflection.这个功 ...