BZOJ1047[HAOI2007]理想的正方形——二维ST表

时间:2023-02-16 15:54:41

题目描述

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

输入

  第一行为3个整数,分别表示a,b,n的值第二行至第a+1行每行为b个非负整数,表示矩阵中相应位置上的数。每
行相邻两数之间用一空格分隔。
100%的数据2<=a,b<=1000,n<=a,n<=b,n<=1000

输出

  仅一个整数,为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
 
 
二维ST表,f[i][j][k]表示以i,j为右下端点边长为2k的正方形内的最大值,最小值同理,枚举每个点作为右下端点求一下最大值和最小值的差来更新答案即可。
#include<set>
#include<map>
#include<queue>
#include<stack>
#include<cmath>
#include<cstdio>
#include<vector>
#include<bitset>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
int a,b;
int n,m;
int f[1010][1010][12];
int g[1010][1010][12];
int ans=1e9+7;
int main()
{
scanf("%d%d%d",&a,&b,&n);
for(int i=1;i<=a;i++)
{
for(int j=1;j<=b;j++)
{
scanf("%d",&f[i][j][0]);
g[i][j][0]=f[i][j][0];
}
}
for(int k=1;k<=10;k++)
{
for(int i=1;i<=a;i++)
{
for(int j=1;j<=b;j++)
{
if(i<(1<<k)||j<(1<<k))
{
continue;
}
f[i][j][k]=max(max(f[i][j][k-1],f[i-(1<<(k-1))][j-(1<<(k-1))][k-1]),max(f[i-(1<<(k-1))][j][k-1],f[i][j-(1<<(k-1))][k-1]));
g[i][j][k]=min(min(g[i][j][k-1],g[i-(1<<(k-1))][j-(1<<(k-1))][k-1]),min(g[i-(1<<(k-1))][j][k-1],g[i][j-(1<<(k-1))][k-1]));
}
}
}
for(int i=0;;i++)
{
if((1<<i)<=n)
{
m=i;
}
else
{
break;
}
}
for(int i=n;i<=a;i++)
{
for(int j=n;j<=b;j++)
{
int mx=max(max(f[i][j][m],f[i-n+(1<<m)][j-n+(1<<m)][m]),max(f[i][j-n+(1<<m)][m],f[i-n+(1<<m)][j][m]));
int mn=min(min(g[i][j][m],g[i-n+(1<<m)][j-n+(1<<m)][m]),min(g[i][j-n+(1<<m)][m],g[i-n+(1<<m)][j][m]));
ans=min(mx-mn,ans);
}
}
printf("%d",ans);
}

BZOJ1047[HAOI2007]理想的正方形——二维ST表的更多相关文章

  1. &lbrack;BZOJ1047&rsqb;&lbrack;HAOI2007&rsqb;理想的正方形 二维单调队列

    题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1047 我们对每矩阵的一列维护一个大小为$n$的单调队列,队中元素为矩阵中元素.然后扫描每一 ...

  2. bzoj1047 &lbrack;HAOI2007&rsqb;理想的正方形——二维单调队列

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=1047 就是先对行做一遍单调队列,再对那个结果按列做一遍单调队列即可. 代码如下: #incl ...

  3. 【BZOJ1047】&lbrack;HAOI2007&rsqb;理想的正方形 (倍增ST表)

    [HAOI2007]理想的正方形 题目描述 有一个\(a*b\)的整数组成的矩阵,现请你从中找出一个\(n*n\)的正方形区域,使得该区域所有数中的最大值和最小值的差最小. 输入输出格式 输入格式: ...

  4. 洛谷 P2216 &lbrack;HAOI2007&rsqb;理想的正方形 &vert;&vert; 二维RMQ的单调队列

    题目 这个题的算法核心就是求出以i,j为左上角,边长为n的矩阵中最小值和最大值.最小和最大值的求法类似. 单调队列做法: 以最小值为例: q1[i][j]表示第i行上,从j列开始的n列的最小值.$q1 ...

  5. &lbrack;HNOI2007&rsqb; 理想正方形 二维ST表

    题目描述 有一个a*b的整数组成的矩阵,现请你从中找出一个n*n的正方形区域,使得该区域所有数中的最大值和最小值的差最小. 输入输出格式 输入格式: 第一行为3个整数,分别表示a,b,n的值 第二行至 ...

  6. 【bzoj1047】&lbrack;HAOI2007&rsqb;理想的正方形 二维RMQ

    题目描述 有一个a*b的整数组成的矩阵,现请你从中找出一个n*n的正方形区域,使得该区域所有数中的最大值和最小值的差最小. 输入 第一行为3个整数,分别表示a,b,n的值第二行至第a+1行每行为b个非 ...

  7. 【洛谷 P2216】 &lbrack;HAOI2007&rsqb;理想的正方形(二维ST表)

    题目链接 做出二维\(ST\)表,然后\(O(n^2)\)扫一遍就好了. #include <cstdio> #include <cstring> #include <a ...

  8. BZOJ3577&colon;玩手机&lpar;最大流&comma;二维ST表&rpar;

    Description 现在有一堆手机放在坐标网格里面(坐标从1开始),坐标(i,j)的格子有s_(i,j)个手机. 玩手机当然需要有信号,不过这里的手机与基站与我们不太一样.基站分为两种:发送站和接 ...

  9. 【CodeForces】713 D&period; Animals and Puzzle 动态规划&plus;二维ST表

    [题目]D. Animals and Puzzle [题意]给定n*m的01矩阵,Q次询问某个子矩阵内的最大正方形全1子矩阵边长.n,m<=1000,Q<=10^6. [算法]动态规划DP ...

随机推荐

  1. linux 查找命令

    查找目录:find /(查找范围) -name '查找关键字' -type d查找文件:find /(查找范围) -name 查找关键字 -print

  2. Python Django开发 1

    先配置个虚拟环境,在Flask第一篇文章有写,这里就跳过了 比如我的Django的目录是:C:\Workspaces\DjangoDemo,已经安装好了名为venv虚拟目录,接下来安装django框架 ...

  3. js控制打印 转的

    很多时候,我们在做系统的时候要做打印功能,打印在js中其实很简单,不过这个很简单的代码并不能满足我们的特定需求,比如我们需要打印的表单在很多文字的中间,或者文字中包含一些广告或者图片什么的,这就很难用 ...

  4. Mint Linuxubuntu 字体配置文件

    <?xml version="1.0"?><!DOCTYPE fontconfig SYSTEM "fonts.dtd"><fon ...

  5. jsoup 对网页中图片解析

    Elements article = new Elements(); Elements Img = new Elements(); article = doc.select("div#con ...

  6. &period;Net Core配置文件

    .Net Core下如何管理配置文件 一.前言 根据该issues来看,System.Configuration在.net core中已经不存在了,那么取而代之的是由Microsoft.Extensi ...

  7. Spring框架中的org&period;springframework&period;context&period;annotation&period;Import注解类

    @Import注解的作用和在使用spring的xml配置时用到的<import/>类似.但应注意是@Import在使用时必须要保证能被IOC容器扫描到,所以通常它会和@Configurat ...

  8. Amber TUTORIAL B5&colon; Simulating the Green Fluorescent Protein

    Section 1: Preparing the PDB file 1EMA是本次教程所用的pdb,可以在PDB数据库下载. pdb4amber -i 1EMA.pdb -o gfp.pdb --dr ...

  9. 在使用 interface 声明一个接口时,只可以使用那个修饰符修饰该接口?

    这是一个看似简单其实挺有深意的题目,答案应该大多数人都知道是什么,不过原理和原因相比很少有人仔细研究过.对于本题,我有三点说明,希望看到这个评论的人能从这三点中看到你以前没注意到的东西:  ①接口的声 ...

  10. hdu1114 dp(完全背包)

    题意:已知空钱罐质量和满钱罐质量(也就是知道钱罐里的钱的质量),知道若干种钱币每种的质量以及其价值,钱币都是无限个,问最少钱罐中有多少钱. 这个题在集训的时候学长给我们做过,所以你会做是应该的,由于已 ...