二合一……

#include <iostream>
#include <cstdio>
using namespace std;
int r, c, m, a[205][205], val[205][205][1005], num[205][205][1005];
int xu, yu, xv, yv, hi, rot[500005], lson[7200005], rson[7200005];
int sum[7200005], siz[7200005], cnt, w[500005];
int getVal(int xu, int yu, int xv, int yv, int hi){
return val[xv][yv][hi]-val[xu-1][yv][hi]-val[xv][yu-1][hi]+val[xu-1][yu-1][hi];
}
int getNum(int xu, int yu, int xv, int yv, int hi){
return num[xv][yv][hi]-num[xu-1][yv][hi]-num[xv][yu-1][hi]+num[xu-1][yu-1][hi];
}
void work1(){
for(int i=1; i<=r; i++)
for(int j=1; j<=c; j++)
scanf("%d", &a[i][j]);
for(int k=1; k<=1000; k++)
for(int i=1; i<=r; i++)
for(int j=1; j<=c; j++){
val[i][j][k] = val[i-1][j][k] + val[i][j-1][k] - val[i-1][j-1][k] + ((a[i][j]>=k)?a[i][j]:0);
num[i][j][k] = num[i-1][j][k] + num[i][j-1][k] - num[i-1][j-1][k] + ((a[i][j]>=k)?1:0);
}
while(m--){
scanf("%d %d %d %d %d", &xu, &yu, &xv, &yv, &hi);
if(getVal(xu, yu, xv, yv, 1)<hi) printf("Poor QLW\n");
else{
int l=1, r=1000, mid, ans;
while(l<=r){
mid = (l + r) >> 1;
if(getVal(xu, yu, xv, yv, mid)>=hi){
ans = mid;
l = mid + 1;
}
else r = mid - 1;
}
ans = getNum(xu, yu, xv, yv, ans) - (getVal(xu, yu, xv, yv, ans)-hi) / ans;//并不是说>=ans的都要选,==ans的只选一部分
printf("%d\n", ans);
}
}
}
int build(int l, int r){
int rt=++cnt;
int mid=(l+r)>>1;
if(l==r) return rt;
if(l<=mid) lson[rt] = build(l, mid);
if(mid<r) rson[rt] = build(mid+1, r);
return rt;
}
int update(int pre, int l, int r, int x){
int rt=++cnt;
int mid=(l+r)>>1;
lson[rt] = lson[pre]; rson[rt] = rson[pre];
siz[rt] = siz[pre] + 1;
sum[rt] = sum[pre] + x;
if(l==r) return rt;
if(x<=mid) lson[rt] = update(lson[pre], l, mid, x);
if(mid<x) rson[rt] = update(rson[pre], mid+1, r, x);
return rt;
}
int query(int qwq, int qaq, int l, int r, int h){
int mid=(l+r)>>1;
int tmp=sum[rson[qaq]]-sum[rson[qwq]];
if(l==r) return (h%l==0)?(h/l):(h/l+1);
if(h<=tmp) return query(rson[qwq], rson[qaq], mid+1, r, h);
else return query(lson[qwq], lson[qaq], l, mid, h-tmp)+siz[rson[qaq]]-siz[rson[qwq]];
}
void work2(){
for(int i=1; i<=c; i++)
scanf("%d", &w[i]);
rot[0] = build(1, 1000);
for(int i=1; i<=c; i++)
rot[i] = update(rot[i-1], 1, 1000, w[i]);
while(m--){
scanf("%d %d %d %d %d", &xu, &yu, &xv, &yv, &hi);
if(sum[rot[yv]]-sum[rot[yu-1]]<hi) printf("Poor QLW\n");
else printf("%d\n", query(rot[yu-1], rot[yv], 1, 1000, hi));
}
}
int main(){
cin>>r>>c>>m;
if(r!=1) work1();
else work2();
return 0;
}

luogu2468 [SDOI2010]粟粟的书架的更多相关文章

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

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

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

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

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

    粟粟的书架 bzoj-1926 Sdoi-2010 题目大意:题目链接 注释:略 想法:分成两个题 前面的我们可以二分,直接二分出来检验即可. 对于R=1的,相当一个数列,我们在上面建立主席树. 然后 ...

  4. Bzoj 1926: [Sdoi2010]粟粟的书架(二分答案+乱搞+主席树)

    1926: [Sdoi2010]粟粟的书架 Time Limit: 30 Sec Memory Limit: 552 MB Description 幸福幼儿园 B29 班的粟粟是一个聪明机灵.乖巧可爱 ...

  5. [SDOI2010]粟粟的书架 [主席树]

    [SDOI2010]粟粟的书架 考虑暴力怎么做 显然是提取出来 (x2-x1+1)*(y2-y1+1) 个数字拿出来 然后从大到小排序 然后就可以按次取数了- 然而接下来看数据范围 \(50\%\ r ...

  6. [BZOJ1926][SDOI2010]粟粟的书架

    BZOJ Luogu Description 幸福幼儿园 B29 班的粟粟是一个聪明机灵.乖巧可爱的小朋友,她的爱好是画画和读书,尤其喜欢 Thomas H. Cormen 的文章.粟粟家中有一个 R ...

  7. BZOJ1926[Sdoi2010]粟粟的书架——二分答案+主席树

    题目描述 幸福幼儿园 B29 班的粟粟是一个聪明机灵.乖巧可爱的小朋友,她的爱好是画画和读书,尤其喜欢 Thomas H. Co rmen 的文章.粟粟家中有一个 R行C 列的巨型书架,书架的每一个位 ...

  8. 【刷题】BZOJ 1926 [Sdoi2010]粟粟的书架

    Description 幸福幼儿园 B29 班的粟粟是一个聪明机灵.乖巧可爱的小朋友,她的爱好是画画和读书,尤其喜欢 Thomas H. Cormen 的文章.粟粟家中有一个 R行C 列的巨型书架,书 ...

  9. BZOJ1926:[SDOI2010]粟粟的书架——题解

    http://www.lydsy.com/JudgeOnline/problem.php?id=1926 https://www.luogu.org/problemnew/show/P2468 幸福幼 ...

  10. 【BZOJ1926】【SDOI2010】粟粟的书架 [主席树]

    粟粟的书架 Time Limit: 30 Sec  Memory Limit: 552 MB[Submit][Status][Discuss] Description 幸福幼儿园 B29 班的粟粟是一 ...

随机推荐

  1. Codeforces Round #410 (Div. 2) A

    Description Mike has a string s consisting of only lowercase English letters. He wants to change exa ...

  2. Baker Vai LightOJ - 1071

    题意:类似传纸条 方法: 把他要求的操作(一个人来回),转化为两个人同时走,除了开始和结束位置只能走不同路,得到的分数和的最大值即可. 一开始想到要定义的状态,是两个人的x(行)和y(列)坐标.这样时 ...

  3. FACVSPOW - Factorial vs Power 数学方法 + 二分

    http://www.spoj.com/problems/FACVSPOW/ 求解n! > a^n最小的整数n 对于有n!和a^n的东西,一般是取ln 然后就是求解 (ln(1) + ln(2) ...

  4. PowerShell~文件操作和对象遍历

    ps提供了丰富的文件操作,如建立,删除,改名,移动,复制,文件夹建立,显示文件列表,同时对数组对象的遍历也很方便,如果在使用PS脚本时,希望现时传入参数,可以把参数声明为param,当然需要把它写在文 ...

  5. fetch和axios区别,proxy代理配置

    1.今天使用fetch调用接口时使用console.log(res.data)始终是undefined,使用anxios请求则可以成功请求到数据,非常奇怪,于是查了一圈,才搞明白是我自以为了,哎,浪费 ...

  6. 详解 Handler 消息处理机制(附自整理超全 Q&A)

    Android 为什么要用消息处理机制 如果有多个线程更新 UI,并且没有加锁处理,会导致界面更新的错乱,而如果每个更新操作都进行加锁处理,那么必然会造成性能的下降.所以在 Android 开发中,为 ...

  7. ie 导出不行,不兼容问题,或只出现后缀文件无法识别

    // 下载模板 @RequestMapping("/download") @ResponseBody public ResponseEntity<byte[]> dow ...

  8. Navicat工具备份还原mysql数据库详细图解

    Navicat是个很不错的MYSQL数据库管理工具,我们常用的还web形式的phpmyadmin和font这三种了,都是非常不错的mysql管理工具.因为Navicat工具兼容性比较好,操作也比较简单 ...

  9. 管道命令和xargs的区别(经典解释) 自己的总结

    1. 简介 之所以能用到这个命令,关键是由于很多命令不支 持|管道来传递参数,而日常工作中有有这个必要, 所以就有了xargs命令,例如:find /sbin -perm +700 |ls -l 这个 ...

  10. python调用脚本或shell的方式

    python调用脚本或shell有下面三种方式: os.system()特点:(1)可以调用脚本.(2)可以判断是否正确执行.(3)满足不了标准输出 && 错误 commands模块特 ...