粟粟的书架(bzoj 1926)
Description
Input
Output
Sample Input
14 15 9 26 53
58 9 7 9 32
38 46 26 43 38
32 7 9 50 28
8 41 9 7 17
1 2 5 3 139
3 1 5 5 399
3 3 4 5 91
4 1 4 1 33
1 3 5 4 185
3 3 4 3 23
3 1 3 3 108
Sample Output
15
2
Poor QLW
9
1
3
HINT
/*
一道二合一的题目。
对于前50%,a[i][j][k]表示矩阵的前i,j格大于k的数的个数,b[i][j][k]表示矩阵的前i,j格大于k的数的总和,预处理出来之后,二分答案。
对于后50%,很明显可以二分答案k,然后转成判断x~y中前k大的总和是否大于h,然后主席树维护一下。
*/
#include<cstdio>
#include<iostream>
#define N 210
#define M 500010
using namespace std;
int a[N][N][],b[N][N][],n,m,Q;
int root[M],Sum[M],cnt;
struct node{int size,lc,rc,sum;}t[M*];
void work1(){
for(int i=;i<=n;i++)
for(int j=;j<=m;j++){
int x;scanf("%d",&x);
for(int k=;k<=;k++){
a[i][j][k]=a[i-][j][k]+a[i][j-][k]-a[i-][j-][k];
b[i][j][k]=b[i-][j][k]+b[i][j-][k]-b[i-][j-][k];
if(x>=k) a[i][j][k]++,b[i][j][k]+=x;
}
}
int x1,y1,x2,y2,h;
while(Q--){
scanf("%d%d%d%d%d",&x1,&y1,&x2,&y2,&h);
int l=,r=,ans=;
while(l<=r){
int mid=l+r>>;
if(b[x2][y2][mid]-b[x1-][y2][mid]-b[x2][y1-][mid]+b[x1-][y1-][mid]>=h)
l=mid+,ans=mid;
else r=mid-;
}
if(ans==) printf("Poor QLW\n");
else {
int sum1=b[x1-][y1-][ans]+b[x2][y2][ans]-b[x2][y1-][ans]-b[x1-][y2][ans]-h;
int sum2=a[x1-][y1-][ans]+a[x2][y2][ans]-a[x2][y1-][ans]-a[x1-][y2][ans];
printf("%d\n",sum2-sum1/ans);
}
}
}
void add(int last,int &k,int l,int r,int x){
k=++cnt;
t[k].size=t[last].size+;
t[k].sum=t[last].sum+x;
t[k].lc=t[last].lc;
t[k].rc=t[last].rc;
if(l==r) return;
int mid=l+r>>;
if(x<=mid) add(t[last].lc,t[k].lc,l,mid,x);
else add(t[last].rc,t[k].rc,mid+,r,x);
}
int query(int x,int y,int l,int r,int k){
if(l==r) return (t[y].sum-t[x].sum)/(t[y].size-t[x].size)*k;
int mid=l+r>>,tot=t[t[y].lc].size-t[t[x].lc].size;
if(k<=tot) return query(t[x].lc,t[y].lc,l,mid,k);
else return t[t[y].lc].sum-t[t[x].lc].sum+query(t[x].rc,t[y].rc,mid+,r,k-tot);
}
void work2(){
for(int i=;i<=m;i++){
int x;scanf("%d",&x);
add(root[i-],root[i],,,x);
Sum[i]=Sum[i-]+x;
}
int x1,y1,x2,y2,h;
while(Q--){
scanf("%d%d%d%d%d",&x1,&y1,&x2,&y2,&h);
if(Sum[y2]-Sum[y1-]<h) {printf("Poor QLW\n");continue;}
int l=,r=y2-y1+,ans=r;
while(l<=r){
int mid=l+r>>,k=y2-y1+-mid;
if(Sum[y2]-Sum[y1-]-query(root[y1-],root[y2],,,k)>=h) r=mid-,ans=mid-;
else l=mid+;
}
printf("%d\n",ans);
}
}
int main(){
scanf("%d%d%d",&n,&m,&Q);
if(n<=&&m<=) work1();
else work2();
return ;
}
粟粟的书架(bzoj 1926)的更多相关文章
- AC日记——[Sdoi2010]粟粟的书架 bzoj 1926
1926 思路: 主席树+二分水题: 代码: #include <bits/stdc++.h> using namespace std; #define maxn 500005 #defi ...
- bzoj 1926: [Sdoi2010]粟粟的书架 (主席树+二分)
链接:https://www.lydsy.com/JudgeOnline/problem.php?id=1926 题面; 1926: [Sdoi2010]粟粟的书架 Time Limit: 30 Se ...
- Bzoj 1926: [Sdoi2010]粟粟的书架(二分答案+乱搞+主席树)
1926: [Sdoi2010]粟粟的书架 Time Limit: 30 Sec Memory Limit: 552 MB Description 幸福幼儿园 B29 班的粟粟是一个聪明机灵.乖巧可爱 ...
- 【刷题】BZOJ 1926 [Sdoi2010]粟粟的书架
Description 幸福幼儿园 B29 班的粟粟是一个聪明机灵.乖巧可爱的小朋友,她的爱好是画画和读书,尤其喜欢 Thomas H. Cormen 的文章.粟粟家中有一个 R行C 列的巨型书架,书 ...
- 【BZOJ-1926】粟粟的书架 二分 + 前缀和 + 主席树
1926: [Sdoi2010]粟粟的书架 Time Limit: 30 Sec Memory Limit: 552 MBSubmit: 616 Solved: 238[Submit][Statu ...
- [BZOJ1926][SDOI2010]粟粟的书架
BZOJ Luogu Description 幸福幼儿园 B29 班的粟粟是一个聪明机灵.乖巧可爱的小朋友,她的爱好是画画和读书,尤其喜欢 Thomas H. Cormen 的文章.粟粟家中有一个 R ...
- bzoj1926[Sdoi2010]粟粟的书架 二分 主席树
1926: [Sdoi2010]粟粟的书架 Time Limit: 30 Sec Memory Limit: 552 MBSubmit: 1064 Solved: 421[Submit][Stat ...
- BZOJ1926:[SDOI2010]粟粟的书架——题解
http://www.lydsy.com/JudgeOnline/problem.php?id=1926 https://www.luogu.org/problemnew/show/P2468 幸福幼 ...
- 【BZOJ1926】粟粟的书架(主席树,前缀和)
[BZOJ1926]粟粟的书架(主席树,前缀和) 题面 Description 幸福幼儿园 B29 班的粟粟是一个聪明机灵.乖巧可爱的小朋友,她的爱好是画画和读书,尤其喜欢 Thomas H. Co ...
随机推荐
- json代码驾照考题批量加入MySQL数据库 ps.executeUpdate()永远只能悲催的加一条数据 去掉id主键自增 用foreach循环数据库只能出现一条语句
package com.swift; import java.io.BufferedReader; import java.io.File; import java.io.FileInputStrea ...
- 第28题:leetcode101:Symmetric Tree对称的二叉树
给定一个二叉树,检查它是否是镜像对称的. 例如,二叉树 [1,2,2,3,4,4,3] 是对称的. 1 / \ 2 2 / \ / \ 3 4 4 3 但是下面这个 [1,2,2,null,3,nul ...
- Win 无法安装 python 包
Win 上使用 pip install 安装出错 使用 wheel 安装 pip install wheel 下载 编译包 http://www.lfd.uci.edu/~gohlke/pythonl ...
- base64转图片上传
不成功,但是有一定的借鉴性 /** * @param base64Codes * 图片的base64编码 */ function sumitImageFile(base64Codes){ consol ...
- python笔记-dict字典的方法
#!/usr/bin/env python #-*- coding:utf-8 -*- #打印0001-9999的数字 for i in range(9999): s = "%04d&quo ...
- TP5 发送邮件代码
发送邮箱邮件方法 /** * 系统邮件发送函数 * @param string $tomail 接收邮件者邮箱 * @param string $name 接收邮件者名称 * @param strin ...
- vue 判断是否登录,未登录跳转到登录页
网页一进入判断是否登录,未登录跳转到登录页面 router.js export default new Router({ routes: [ { path: '/', name: 'HelloWorl ...
- thinkphp 3.2.3 程序执行时序图
- 数据存储之json文件处理和csv文件处理
什么是json: JSON(JavaScript Object Notation, JS 对象标记) 是一种轻量级的数据交换格式.它基于 ECMAScript (w3c制定的js规范)的一个子集,采用 ...
- Python中字符串String的基本内置函数与过滤字符模块函数的基本用法
Python中字符串String的基本内置函数与用法 首先我们要明白在python中当字符编码为:UTF-8时,中文在字符串中的占位为3个字节,其余字符为一个字节 下面就直接介绍几种python中字符 ...