luogu2468 [SDOI2010]粟粟的书架
二合一……
#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]粟粟的书架的更多相关文章
- 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 ... 
- [bzoj1926][Sdoi2010]粟粟的书架_二分_主席树
		粟粟的书架 bzoj-1926 Sdoi-2010 题目大意:题目链接 注释:略 想法:分成两个题 前面的我们可以二分,直接二分出来检验即可. 对于R=1的,相当一个数列,我们在上面建立主席树. 然后 ... 
- Bzoj 1926: [Sdoi2010]粟粟的书架(二分答案+乱搞+主席树)
		1926: [Sdoi2010]粟粟的书架 Time Limit: 30 Sec Memory Limit: 552 MB Description 幸福幼儿园 B29 班的粟粟是一个聪明机灵.乖巧可爱 ... 
- [SDOI2010]粟粟的书架 [主席树]
		[SDOI2010]粟粟的书架 考虑暴力怎么做 显然是提取出来 (x2-x1+1)*(y2-y1+1) 个数字拿出来 然后从大到小排序 然后就可以按次取数了- 然而接下来看数据范围 \(50\%\ r ... 
- [BZOJ1926][SDOI2010]粟粟的书架
		BZOJ Luogu Description 幸福幼儿园 B29 班的粟粟是一个聪明机灵.乖巧可爱的小朋友,她的爱好是画画和读书,尤其喜欢 Thomas H. Cormen 的文章.粟粟家中有一个 R ... 
- BZOJ1926[Sdoi2010]粟粟的书架——二分答案+主席树
		题目描述 幸福幼儿园 B29 班的粟粟是一个聪明机灵.乖巧可爱的小朋友,她的爱好是画画和读书,尤其喜欢 Thomas H. Co rmen 的文章.粟粟家中有一个 R行C 列的巨型书架,书架的每一个位 ... 
- 【刷题】BZOJ 1926 [Sdoi2010]粟粟的书架
		Description 幸福幼儿园 B29 班的粟粟是一个聪明机灵.乖巧可爱的小朋友,她的爱好是画画和读书,尤其喜欢 Thomas H. Cormen 的文章.粟粟家中有一个 R行C 列的巨型书架,书 ... 
- BZOJ1926:[SDOI2010]粟粟的书架——题解
		http://www.lydsy.com/JudgeOnline/problem.php?id=1926 https://www.luogu.org/problemnew/show/P2468 幸福幼 ... 
- 【BZOJ1926】【SDOI2010】粟粟的书架 [主席树]
		粟粟的书架 Time Limit: 30 Sec Memory Limit: 552 MB[Submit][Status][Discuss] Description 幸福幼儿园 B29 班的粟粟是一 ... 
随机推荐
- Alt+数字 输入特殊字符
			前言: 按住Alt键不放,再按(小键盘的)数字键,然后放开就可以输入特殊字符. 起始 终止 字符类别 0 255 基本与ASCII 码表对应 42657 42680 大写希腊字母 ... 
- 513 Find Bottom Left Tree Value 找树左下角的值
			给定一个二叉树,在树的最后一行找到最左边的值. 详见:https://leetcode.com/problems/find-bottom-left-tree-value/description/ C+ ... 
- poj3252Round Numbers
			链接 也算是组合 以前按组合做过一次 忘记怎么做的了 这次按dp写的 dp[i][j][g][k] 表示第i位为k(0|1)而且有j个1,g个0的情况数 貌似写的麻烦了...这一类的题,进行逐位计算就 ... 
- ABP教程(四)- 开始一个简单的任务管理系统 - 实现UI端的增删改查
			接上一篇:ABP教程(三)- 开始一个简单的任务管理系统 – 后端编码 1.实现UI端的增删改查 1.1添加增删改查代码 打开SimpleTaskSystem.sln解决方案,添加一个“包含视图的MV ... 
- 多线程wait和notify实现1212
			package threadT; public class ThreadMain { public static void main(String args[]) { final Object obj ... 
- vue利用计算属性做(展开收起)小例子
			<template> <div class="wrap"> <div class="box"> <div v-for= ... 
- HYSBZ  1588 营业额统计 (Splay树)
			题意:给出一个公司每一天的营业额,求每天的最小波动值之和.该天的最小波动值= min { 绝对值| 该天以前某一天的营业额-该天的营业额 | }.第一天的最小波动值就是其自己. 思路:Splay伸展树 ... 
- 2019年今日头条机试_JAVA后台岗_第二题
			使用map的递推,java对象做key需要重写equeal,hashCode方法,使拥有相同属性值的对象被识别为同一对象. import java.util.*; class Cat{ public ... 
- Android(java)学习笔记161:开发一个多界面的应用程序之人品计算器的简单实现
			1.开启新的Activity的方法: (1)Intent 意图 (2)intent.setAction("自定义") 记得在清单文件中声明 (3)intent.setData(前 ... 
- java-基于泛型和反射机制的通用比较器实现
			一.前言 Java的比较器是用来对List集合进行排序用的,分为内部比较器和外部比较器两类 内部比较器:被排序的类要 implements Comparable 类,并实现compareTo方法. 外 ... 
