理想的正方形 HAOI2007 二維RMQ

2022-04-06 02:10:22 字數 1644 閱讀 1377

省隊選拔賽河南

時間限制: 1 s

空間限制: 256000 kb

題目等級 : 大師 master

有乙個a*b的整數組成的矩陣,現請你從中找出乙個n*n的正方形區域,使得該區域所有數中的最大值和最小值的差最小。

輸入描述 input description

第一行為3個整數,分別表示a,b,n的值

第二行至第a+1行每行為b個非負整數,表示矩陣中相應位置上的數。每行相鄰兩數之間用一空格分隔。

輸出描述 output description

僅乙個整數,為a*b矩陣中所有「n*n正方形區域中的最大整數和最小整數的差值」的最小值。

樣例輸入 sample input

5 4 2

1 2 5 6

0 17 16 0

16 17 2 1

2 10 2 1

1 2 2 2

樣例輸出 sample output

1資料範圍及提示 data size & hint

(1)矩陣中的所有數都不超過1,000,000,000

(2)20%的資料2<=a,b<=100,n<=a,n<=b,n<=10

(3)100%的資料2<=a,b<=1500,n<=a,n<=b,n<=100

/*

嗯,腦補二維rmq fail,掛成暴力分。

一維是維護乙個區間,二維是維護乙個矩陣。

由於這個題是小正方形,三維陣列即可。二維rmq略麻煩...

*/#include

#include

#include

#include

#include

#define x2 x1+n-1-(1<#define y2 y1+n-1-(1namespace

std;

void read(int &x)

while(isdigit(c))

x*=f;

}void

out(int

x)

if(x<0)

char c[30]= ;

while(x)c[++c[0]]=x%10+48,x/=10

;

while(c[0])putchar(c[c[0]--]);

}const

int inf=1e3+29

;int

i,j,k,m;

int g[inf][inf][12

];int f[inf][inf][12

];int

x,y,n;

int ans=0x7fffffff

;int query(int x1,int

y1)int

main()

for(k=1; k<=12; k++)

for(i=1; i+(1

<1

<=x; i++)

for(j=1; j+(1

<1

<=y; j++)

for(i=1; i+n-1

<=x; i++)

for(j=1; j+n-1

<=y; j++)

ans=min(ans,query(i,j));

out(ans);

return0;

}

HAOI 2007 理想的正方形

有乙個a b的整數組成的矩陣,現請你從中找出乙個n n的正方形區域,使得該區域所有數中的最大值和最小值的差最小。輸入格式 第一行為3個整數,分別表示a,b,n的值 第二行至第a 1行每行為b個非負整數,表示矩陣中相應位置上的數。每行相鄰兩數之間用一空格分隔。輸出格式 僅乙個整數,為a b矩陣中所有 ...

HAOI2007 理想的正方形

時間限制 10 sec 記憶體限制 162 mb 有乙個a b的整數組成的矩陣,現請你從中找出乙個n n的正方形區域,使得該區域所有數中的最大值和最小值 的差最小。第一行為3個整數,分別表示a,b,n的值第二行至第a 1行每行為b個非負整數,表示矩陣中相應位置上的數。每 行相鄰兩數之間用一空格分隔。...

HAOI2007 理想的正方形

有乙個a b的整數組成的矩陣,現請你從中找出乙個n n的正方形區域,使得該區域所有數中的最大值和最小值的差最小.第一行為3個整數,分別表示a,b,n的值第二行至第a 1行每行為b個非負整數,表示矩陣中相應位置上的數.每行相鄰兩數之間用一空格分隔.100 的資料2 a,b 1000,n a,n b,n...