首页 > 其他分享 >1604:理想的正方形

1604:理想的正方形

时间:2024-06-17 13:23:17浏览次数:16  
标签:arr 理想 int 1604 minrow back 正方形 front row

// 1604:理想的正方形.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
//

#include <iostream>
#include <deque>
#include <algorithm>

using namespace std;
/*
https://loj.ac/p/10182
http://ybt.ssoier.cn:8088/problem_show.php?pid=1604

原题来自:HAOI 2007

有一个 a×b
 的整数组成的矩阵,现请你从中找出一个 n×n
 的正方形区域,使得该区域所有数中的最大值和最小值的差最小。

【输入】
第一行为三个整数,分别表示 a,b,n
 的值;

第二行至第 a+1
 行每行为 b
 个非负整数,表示矩阵中相应位置上的数。

【输出】
输出仅一个整数,为 a×b
 矩阵中所有「n×n
 正方形区域中的最大整数和最小整数的差值」的最小值。

【输入样例】
5 4 2
1 2 5 6
0 17 16 0
16 17 2 1
2 10 2 1
1 2 2 2
【输出样例】
1


2≤a,b≤1000,n≤a,n≤b,n≤100,矩阵中的所有数都不超过 10^9。
*/

const int N = 1010;
long long arr[N][N];
long long minrow[N][N];
long long maxrow[N][N];
int a, b, n;

void getmin(int row) {
	deque<long long> q;
	for (int i = 1; i <= b; i++) {
		while (!q.empty() && i - q.front() + 1 > n) q.pop_front();
		while (!q.empty() && arr[row][q.back()] >= arr[row][i]) q.pop_back();
		if (q.empty() || arr[row][q.front()] >= arr[row][i]) {
			minrow[row][i] = arr[row][i];
		}
		else {
			minrow[row][i] = arr[row][q.front()];
		}
		q.push_back(i);
	}
}



void getmax(int row) {
	deque<long long> q;
	for (int i = 1; i <= b; i++) {
		while (!q.empty() && i - q.front() + 1 > n) q.pop_front();
		while (!q.empty() && arr[row][q.back()] <= arr[row][i]) q.pop_back();
		if (q.empty() || arr[row][q.front()] <= arr[row][i]) {
			maxrow[row][i] = arr[row][i];
		}
		else {
			maxrow[row][i] = arr[row][q.front()];
		}
		q.push_back(i);
	}
}


void getminCol(int col,int mincol[]) {
	deque<long long> q;
	for (int i = 1; i <= a; i++) {
		while (!q.empty() && i - q.front() + 1 > n) q.pop_front();
		while (!q.empty() && minrow[q.back()][col] >= minrow[i][col]) q.pop_back();
		if (q.empty() || minrow[q.front()][col] >= minrow[i][col]) {
			mincol[i] = minrow[i][col];
		}
		else {
			mincol[i] = minrow[q.front()][col];
		}
		q.push_back(i);
	}


}

void getmaxCol(int col, int maxcol[]) {
	deque<long long> q;
	for (int i = 1; i <= a; i++) {
		while (!q.empty() && i - q.front() + 1 > n) q.pop_front();
		while (!q.empty() && maxrow[q.back()][col] <= maxrow[i][col]) q.pop_back();
		if (q.empty() || maxrow[q.front()][col] <= maxrow[i][col]) {
			maxcol[i] = maxrow[i][col];
		}
		else {
			maxcol[i] = maxrow[q.front()][col];
		}
		q.push_back(i);
	}

}

int main()
{
	cin >> a >> b >> n;

	for (int i = 1; i <= a; i++) {
		for (int j = 1; j <= b; j++) {
			cin >> arr[i][j];
		}
	}

	for (int i = 1; i <= a; i++) {
		getmin(i);
		getmax(i);
	}
	long long ans = 1e18;
	for (int i = n; i <= b; i++) {
		//对每个竖列做滑动窗口 得到最大最小值
		int mincol[N]; int maxcol[N];
		getminCol(i, mincol);
		getmaxCol(i, maxcol);
		for (int j = n; j <= a; j++) {
			ans = min(ans, 1ll * maxcol[j] - mincol[j]);
		}
	}

	cout << ans << endl;
	return 0;
}


标签:arr,理想,int,1604,minrow,back,正方形,front,row
From: https://www.cnblogs.com/itdef/p/18252181

相关文章

  • 《Fundamentals of Power Electronics》——理想变压器基本公式推导
    接下去推导理想变压器的基本公式。理想变压器满足以下三个条件:1、无铜损。假设原副边线圈均无纯电阻,则不会因在铜导线中产生焦耳热引起能量损耗,另外也不考虑回路中的分布电容。2、无铁损。忽略通过铁芯的磁通量变化引起的涡流损耗,忽略磁滞损耗,即铁芯由极端的软磁材料制成。3......
  • 2024年强力攻略!如何找到理想的应届生求职项目?【后端篇】
            如果你的项目是市面上常见的几种项目,如瑞吉外卖、苍穹外卖、仿牛客项目、黑马点评、传智健康、尚医通、谷粒商城、12306等,那你需要注意了。        由于这些项目已经非常常见,并且面试官可能已经见过太多类似的项目,所以在面试中可能会对你进行减分。......
  • SCT53600TVB具有反向电流保护的理想二极管控制器
     4.7V至65V工作范围· –65V反向额定电压· 用于外部N沟道MOSFET的电荷泵· 20mV正向压降调节· 12V栅极驱动电压· 带启用输入· 驱动高侧外部N沟道MOSFET· 1μA关断电流(EN=低)· 60μA工作静态电流(EN=高)· 2.3-A峰值门关断电流· 0.75us内快......
  • [GHCTF 2024 新生赛]理想国 flask session伪造
    忙着毕业论文几天没做题了。进入页面发现几个api接口,注册登录搜索登出4个。利用postman访问注册接口注册。可以看到返回了token,利用token访问login。尝试search页面传入file参数试试能不能目录穿越。得到secret-key,这里有个非预期解,访问/proc/1/environ直接得到flag。......
  • 里氏替换原则经典反例:正方形不是长方形
    里氏替换原则指出:“继承必须确保超类所拥有的性质在子类中仍然成立”,在程序中的表现就是某个接口能接受超类对象为参数,那么它也必须应该能接受子类对象为参数,且程序不会出现异常。也就是说子类对象应该能够替换掉超类对象,而程序的行为不会改变。最经典的用于说明里氏替换原......
  • 牛客网刷题 | BC111 空心正方形图案
    目前主要分为三个专栏,后续还会添加:    专栏如下:          C语言刷题解析    C语言系列文章    我的成长经历感谢阅读!初来乍到,如有错误请指出,感谢!描述KiKi学习了循环,BoBo老师给他出了一系列打印图案的练习,该任务是打印用“*”组......
  • 一键裁切视频尺寸,让画面更理想!
    在数字影像的宇宙中,视频记录着我们的生活、情感与梦想。不过,并非每一段视频都能完美适应我们的展示平台,尺寸的局限常常限制了画面的表现力,让画面显得不够理想。这该如何是好?别着急,小编这就将答案告诉大家,让小伙伴们视频画面完美地调整到理想的尺寸,从而呈现出最佳的效果。究竟是......
  • 最大正方形
    题目描述在一个$n\timesm$的只包含$0$和$1$的矩阵里找出一个不包含$0$的最大正方形,输出边长。输入格式输入文件第一行为两个整数$n,m(1\leqn,m\leq100)$,接下来$n$行,每行$m$个数字,用空格隔开,$0$或$1$。输出格式一个整数,最大正方形的边长。样例输入4401......
  • 探索智慧楼宇:未来居住的理想之地
    在城市的喧嚣与繁华中,楼宇不仅是我们工作与生活的场所,更是智慧科技发展的前沿阵地。当传统的建筑遇上智慧的火花,便诞生了令人瞩目的智慧楼宇。山海鲸可视化搭建的智慧楼宇数字孪生系统 一、智慧楼宇,定义未来生活智慧楼宇不仅仅是一个简单的概念,它更是对未来生活方式的全新诠......
  • 理想中的世界-二次元
    Tips:当你看到这个提示的时候,说明当前的文章是由原emlog博客系统搬迁至此的,文章发布时间已过于久远,编排和内容不一定完整,还请谅解`理想中的世界-二次元日期:2018-1-13阿珏二次元浏览:3842次评论:4条九月一到,就有了秋意。它踮起脚尖掠过树顶,染红几片叶子,然后乘着一簇飞掠......