剛開始用二維rmq直接給超記憶體了。。。
用單調佇列可以做到o(n^2)的複雜度。具體是先把每行用單調佇列處理一下。再把處理後的用列單調佇列處理下。
# include # includeview code# include
# include
# include
# include
# include
# include
# include
# include
# include
using
namespace
std;
# define lowbit(x) ((x)&(-x))
# define pi acos(-1.0
)# define eps 1e-9
# define mod
12345678
# define inf
1000000000
# define mem(a,b) memset(a,b,
sizeof
(a))
# define for(i,a,n)
for(int i=a; i<=n; ++i)
# define fo(i,a,n)
for(int i=a; ii)
# define bug puts("h
");# define lch p
<<1
,l,mid
# define rch p
<<1|1,mid+1
,r# define mp make_pair
# define pb push_back
typedef pair
pii;
typedef vector
vi;# pragma comment(linker,
"/stack:1024000000,1024000000")
typedef
long
long
ll;int
scan()
void out(int
a)
if(a>=10) out(a/10
); putchar(a%10+'0'
);}const
int n=1005;//
code begin...
intval[n][n], row_max[n][n], row_min[n][n], col_max[n][n], col_min[n][n], que[n], head, tail;
intmain ()
head=-1; tail=0
; for(j,
1,m)
}for(j,
1,m-a+1
) head=-1; tail=0
; for(i,
1,n)
}int ans=inf;
for(i,
1,n-a+1) for(j,1,m-a+1) ans=min(ans,col_max[i][j]-col_min[i][j]);
printf(
"%d\n
",ans);
return0;
}
BZOJ1047 理想的正方形
time limit 10 sec memory limit 162 mb submit 4137 solved 2326 有乙個a b的整數組成的矩陣,現請你從中找出乙個n n的正方形區域,使得該區域所有數中的最大值和最小值 的差最小。第一行為3個整數,分別表示a,b,n的值第二行至第a 1行每行...
BZOJ 1047 理想的正方形
bzoj 1047 傳送門 1 先橫向用單調佇列求出每個數左邊 n 個數中的最值 2 再縱向利用橫向的結果用單調佇列進行相同的操作 通過以上操作將 a b 的矩陣轉化為了 a n 1 b n 1 的矩陣 相當於每個正方形被縮成了乙個點,而每個點的最值就代表著原正方形中的最值 tip 1 又被 1 2...
BZOJ 1047 理想的正方形
看到這到題,第一反應當然是暴搜一遍,但是資料較大,暴搜鐵定過不了,自然想到進行優化,優化的方案很多,每個人的思路可能不同,在這裡我的思路僅供參考。我的想法是用單調佇列 單調棧,當然簡單的單調佇列 單調棧只適用於一行資料,對於這道題要進行一定的組合和變換。根據題目的介紹,可以大致總結出以下資訊 第一,...