2019:Cornfields

网址如下:

OpenJudge - 2019:Cornfields

唉,最近沉迷法环,都没怎么学习了

话说这题的名字让我想起了《星际穿越》了(玉米地呀玉米地)

这是翻译过后的版本,题目要求我们帮助FJ找到放置玉米地的最佳位置,但实际上我们只需要根据给出的查询,来给出最大值和最小值的差值就行了

但是注意到查询数K最大会有十万,所以我们不可能根据查询现查现算,很明显会TLE,除非你有一个方法可以瞬间得到子矩阵的最大值和最小值,我是没有想到啦

那转变一下思路,注意到B和N最大才250,我们只需要提前把答案设置好,供后面的查询就行了

方法就是设置一个二维数组,索引的坐标是子矩阵左上角的坐标,值是最大值和最小值。根据输入的数据不断更新这个矩阵就可以了,数据输入完,这个矩阵就是供查询的答案矩阵

代码如下:

cpp 复制代码
#include<cstdio>
#include<algorithm>

const int maxn = 251;

struct Node{
	int max, min;
	Node():max(-1), min(251){}
}martix[maxn][maxn];
int N, B, K;

void update(int x, int y, int val){
	int cnt_i = 0, cnt_j = 0;
	for(int i = x; i && cnt_i < B; i--, cnt_i++)
		for(int j = y; j && cnt_j < B; j--, cnt_j++){
			martix[i][j].max = std::max(val, martix[i][j].max);
			martix[i][j].min = std::min(val, martix[i][j].min);
		}
}

int main(void)
{
	scanf("%d%d%d", &N, &B, &K);
	for(int i = 1; i <= N; i++)
		for(int j = 1; j <= N; j++){
			int val; scanf("%d", &val);
			update(i, j, val);
		}
	while(K--){
		int x, y; scanf("%d%d", &x, &y);
		printf("%d\n", martix[x][y].max - martix[x][y].min);
	}

	return 0;
}
相关推荐
机器学习之心2 分钟前
信号分解和小波阈值联合降噪 | NRBO-FMD基于牛顿拉夫逊算法优化特征模态分解+皮尔逊系数+小波阈值降噪+信号重构,MATLAB代码
算法·matlab·重构·nrbo-fmd·特征模态分解
Lauren_Blueblue4 分钟前
第十六届蓝桥杯省赛Python研究生组-F串
python·算法·蓝桥杯·算法基础
鲸渔6 分钟前
【C++ 入门】第一个程序:Hello World 与基本语法规则
开发语言·c++·算法
EverestVIP6 分钟前
C++ 仿函数(Functors)
c++
‎ദ്ദിᵔ.˛.ᵔ₎7 分钟前
滑动窗口算法
算法·哈希算法
sali-tec8 分钟前
C# 基于OpenCv的视觉工作流-章46-矩形卡尺
图像处理·人工智能·opencv·算法·计算机视觉
仟濹10 分钟前
【算法打卡day39(2026-04-06~08 周一~周三)】(10道蓝桥杯真题)今日练习:蓝桥杯第13届省赛B组Cpp组
算法·职场和发展·蓝桥杯
美式请加冰15 分钟前
最短路径问题
java·数据结构·算法
会编程的土豆15 分钟前
【数据结构与算法】 时间复杂度计算
数据结构·c++·算法
John_ToDebug16 分钟前
Chromium 页面类型与 IPC 通信机制深度解析
前端·c++·chrome