給出乙個n×m
n×mn×
m的矩陣,現在要你從裡面找出乙個k×k
k×kk×
k的矩陣,使得這個矩陣的最大值減去最小值最大。n,m
≤1e3
n,m\leq1e3
n,m≤1e
3。如果只是乙個序列,維護長度為k
kk的區間的最大值減去最小值。直接用兩個單調佇列分別維護這個滑動視窗即可。那麼要維護乙個矩形k×n
k×nk×
n的矩形的最大值和最小值,我們可以把每個k×1
k×1k×
1的矩形壓縮成乙個點,最大值就是其中的最大值,最小值就是其中的最小值。
直接暴力求仍然是o(n
mk
)o(nmk)
o(nmk)
的,不如對每一列用單調佇列預處理出這一段的最大值和最小值。這樣時間複雜度就是o(n
m)
o(nm)
o(nm)的。
#includeusing namespace std;
typedef long long ll;
const int inf=0x3f3f3f3f;
const ll inf=long_long_max;
const int n=1e3+7;
int mp[n][n];
int ma[n][n],mi[n][n];
int qmax[n],qmin[n];
int ma[n],mi[n];
int h1=1,t1=0;
int h2=1,t2=0;
int tot=0;
int main()
} for(int j=1;j<=m;j++)
} }for(int i=1;i<=tot;i++)
int h1=1,t1=0;
int h2=1,t2=0;
for(int j=1;j<=m;j++)
} }printf("%d\n",ans);
return 0;
}
洛谷P2216 理想的正方形
題目 有可以直接找 maxn i j t 為 i,j 為左下角長度為t的正方形內的最大值。然後可以有以下轉移 maxn i j t max maxn i 1 j t 1 maxn i j t 1 maxn i j 1 t 1 maxn i 1 j 1 t 1 然後考慮滾動陣列,最後答案直接列舉即可。...
洛谷P2216 理想的正方形 單調佇列
有乙個n m n times m n m的整數組成的矩陣,現請你從中找出乙個k k k times k k k的正方形區域,使得該區域所有數中的最大值和最小值的差最小。樸素的想法是直接暴力列舉區間,然後列舉其中的每一位。時間複雜度o n m k2 o nm times k 2 o nm k 2 另一...
P2216 HAOI2007 理想的正方形()
題目鏈結 有乙個a乘b的整數組成的矩陣,現請你從中找出乙個nn的正方形區域,使得該區域所有數中的最大值和最小值的差最小。輸入輸出格式 輸入格式 第一行為3個整數,分別表示a,b,n的值 第二行至第a 1行每行為b個非負整數,表示矩陣中相應位置上的數。每行相鄰兩數之間用一空格分隔。輸出格式 僅乙個整數...