题意描述
“没有金坷垃,怎么种庄稼?”
花花家有一块田,所有庄稼排成了 N 行 M 列。初始时,每棵庄稼都有一个自己的高度
hi;j。花花每次可以使用 1mol 的金克拉使一棵庄稼的高度增加 1。现在有 Q 个询问,花花每
次想知道最少需要使用多少 mol 的金克拉,才能使田里出现一块高度一致,大小为 ai × bi 的
庄稼。
其中每个询问是独立的,也就是说这次询问使用的金克拉不会影响到下一次询问。
输入格式
输入第一行包含两个正整数 N 和 M。
接下来 N 行每行包括 M 个正整数,表示每棵庄稼最初的高度 hi;j。
接下来 Q 行每行包括两个正整数 ai 和 bi。
输出格式
输出共包括 Q 行,对于每个询问输出使用金克拉的最少 mol 数。
样例输入
3 4
1 8 3 4
5 2 3 1
3 6 2 2
4
1 1
2 2
2 3
3 2
样例输出
0 4
15
9

样例解释
对于第二个询问,最优方案之一为选择以下庄稼:
3 1
2 2
对于第三个询问,最优方案之一为选择以下庄稼:
5 2 3
3 6 2
对于第四个询问,最优方案之一为选择以下庄稼:
3 4
3 1
2 2
3.7 数据规模与约定
• 对于 50% 的数据: N; M ≤ 40;
• 另有 20% 的数据: N; M ≤ 200;
• 另有 20% 的数据: N; M ≤ 300;
• 对于 100% 的数据: N; M; hi;j ≤ 1000; Q ≤ 50; 1 ≤ ai ≤ N; 1 ≤ bi ≤ M。

/*
分析题目,当一块农田的位置被确定下来之后,求出其中最高的一亩田,其他的就一定要变成和他相同的高度,问题就是这个最大值不好求,我们想到了滑动窗口这个典型例题,这个求最大值的过程可以看做是一个二维的“滑动窗口”,这样先处理每一行,在处理矩阵,分别使用两次单调队列
*/
#include<iostream>
#include<cstdio>
#include<string>
#include<cstring>
#include<algorithm>
#define ll long long
using namespace std;
const int maxn = ;
const int inf = ;
int n,m,qes,h[maxn][maxn];
int q[maxn],l,r,cnt,qc[maxn],mc[maxn][maxn];
ll mx[maxn][maxn],sum[maxn][maxn];
int read(){
char ch=getchar();
int x=,f=;
while(!(ch>=''&&ch<='')){if(ch=='-')f=-;ch=getchar();};
while(ch>=''&&ch<=''){x=x*+(ch-'');ch=getchar();};
return x*f;
}
void update(int &x,int y){
if(y > x) x = y;
}
void clean(){
l = ;
r = ;
q[] = inf;
q[] = -inf;
cnt = ;
}
void push(int x,int lm){
q[++r] = x;
qc[r] = ;
q[r+] = -inf;
while(q[r] >= q[r-]){
qc[r-] += qc[r];
q[r-] = q[r];
q[r--] = -inf;
}
if(++cnt > lm){
if(--qc[l] == ) q[l++] = inf;
}
}
void work(int y,int x){
for(int i = ;i <= n;i++){
clean();
for(int j = ;j <= m;j++){
push(h[i][j],x);
mx[i][j] = q[l];
}
}
ll ans = 9876543210123LL;
ll base = y*x;
for(int j = x;j <= m;j++){
clean();
for(int i = ;i <= n;i++){
push(mx[i][j],y);
if(i >= y) ans = min(ans,base * q[l] - (sum[i][j] - sum[i-y][j] - sum[i][j-x] + sum[i-y][j-x]));
}
}
cout<<ans<<endl;
}
void input(){
freopen("fertilize.in","r",stdin);
freopen("fertilize.out","w",stdout);
n = read();
m = read();
for(int i = ;i <= n;i++){
for(int j = ;j <= m;j++){
h[i][j] = read();
sum[i][j] = sum[i][j-] + h[i][j];
}
}
for(int j = ;j <= m;j++){
for(int i = ;i <= n;i++){
sum[i][j] = sum[i-][j] + sum[i][j];
}
}
qes = read();
int y,x;
for(int i = ;i <= qes;i++){
y = read();
x = read();
work(y,x);
}
}
int main(){
input();
return ;
}

湖南附中模拟day1 金坷垃的更多相关文章

  1. 湖南附中模拟day1 瞭望塔

    /* 这个题要用到树的性质,一般比较难的图论题会往这方面靠拢,这样用很容易出错,应该先写暴力,然后再去一点点想正解 */ //暴力70分 #include<iostream> #inclu ...

  2. 湖南附中模拟day1 收银员

    4.1 题意描述花花家的超市是 24 小时营业的,现在需要招聘收银员.超市每个小时都需要不同数量的收银员,用 ai 表示一天中 i 点到 i + 1 点这一小时内需要的收银员数量,特别地 a23 表示 ...

  3. P5035金坷垃题解(快速幂的讲解)

      首先经过读题,我们发现找到合格的金坷垃,怎么样的金坷垃才是合格的呢?(我们不难发现1肯定是合格的[题目已经给出了]) 然后我们开始手推一下之后合格的金坷垃: 2-1=1(合格) 3-1-1=1(不 ...

  4. 湖南国庆模拟赛day1 分组

    题目大意:给你一个n个数的数列s,要对这些数进行分组,当有任意两个数在一种方案在一起而在另一种方案中不在一起算是两种不同的方案,一个组的"不和谐程度"为组内数的极差,如果只有一个人 ...

  5. 省常中模拟 day1

    第一题: 题目大意: 给出N个数的数列,如果相邻的两个数加起来是偶数,那么就可以把这两个数消掉,求最多能消掉多少数. 解题过程: 1.先自己手工模拟了几组数据,发现不管消除的顺序如何,最终剩下的是一定 ...

  6. HGOI20180817 (NOIP模拟Day1 task)

    HGOI自测 初测:150=80+20+50 rank1~rank3(并列3个rank1,所以我是rank3 qwq) 今日分突然想简约 CF359A Table https://www.luogu. ...

  7. GDOI2017第二轮模拟day1 总结

    平民比赛 这场比赛的暴力分非常友好. 但是我并没有拿到全部的暴力分. 1(暴力分\(60/100\)) 暂时我可以拿的暴力分为\(30/100\),直接mst模拟即可. 然而当时打了个辣鸡莫队,结果爆 ...

  8. 黄学长模拟day1 大逃亡

    给出数字N(1<=N<=10000),X(1<=x<=1000),Y(1<=Y<=1000),代表有N个敌人分布一个X行Y列的矩阵上,矩形的行号从0到X-1,列号从 ...

  9. 黄学长模拟day1 球的序列

    N个编号为1-n的球,每个球都有唯一的编号.这些球被排成两种序列,分别为A.B序列,现在需要重新寻找一个球的序列l,对于这个子序列l中任意的两个球,要求j,k(j<k),都要求满足lj在A中位置 ...

随机推荐

  1. 加州大学伯克利分校Stat2.2x Probability 概率初步学习笔记: Section 5 The accuracy of simple random samples

    Stat2.2x Probability(概率)课程由加州大学伯克利分校(University of California, Berkeley)于2014年在edX平台讲授. PDF笔记下载(Acad ...

  2. 【Beta版本】冲刺-Day3

    队伍:606notconnected 会议时间:12月11日 目录 一.行与思 二.站立式会议图片 三.燃尽图 四.代码Check-in 一.行与思 张斯巍(433) 今日进展:学习了很多androi ...

  3. HTML5学习总结-06 WebWorker

    一 WebWorkder 它允许开发人员编写能够长时间运行而不被用户所中断的后台程序,去执行事务或者逻辑,并同时保证页面对用户的响应.简而言之,就是允许JavaScript创建多个线程,但是子线程完全 ...

  4. iOS - 利用runtime加深对基础知识的理解

    利用runtime加深对基础知识的理解 如果对runtime需要学习,可以看这篇,以下仅作为学习笔记,相互交流. runtime的头文件: #import <objc/runtime.h> ...

  5. Saltstack 介绍、安装、配置(一)

    Slatstack 介绍 官网:https://saltstack.com/ 官方源:http://repo.saltstack.com/  (介绍各操作系统安装方法) http://repo.sal ...

  6. nginx查看安装了哪些模块

    查看安装了哪些模块命令: [root@RG-PowerCache-X xcache]# nginx/sbin/nginx -Vnginx version: nginx/1.2.3built by gc ...

  7. Apache 使用localhost(127.0.0.1)可以访问 但是使用本机IP(局域网)不能访问

  8. dos命令复制当天生成的以日期为文件名的文件

    1.利用SqlServer的自动备份功能,将数据自动备份,备份出的文件格式如下:             db_backup_201001270930.bak 2.编辑bat脚本            ...

  9. Random类

    Random类是随机数产生类,可以指定一个随机数的范围,然后任意产生在此范围中的数字. //================================================= // F ...

  10. 使用Diagnose服务查看Azure网站诊断信息

    注意:当前操作只针对"基本"和"标准"模式的网站(也就是有独立实例的网站) 登陆网站的kudu模式:http://{yoursitename}.scm.chin ...