求调
查看原帖
求调
547238
篮网总冠军楼主2024/9/24 22:18

#include <bits/stdc++.h>
using namespace std;

int st1[1005][1005][12];
int st2[1005][1005][12];
int ma(int i,int j,int n){
	int s=0;
	for(int i1=i;i1<i+n;i1++){
		int l=j;
		int r=j+n-1;
		int k=log2(r-l+1);
		s=max(s,max(st2[i1][l][k],st2[i1][r-(1<<k)+1][k]));
	}
	return s;
}
int mi(int i,int j,int n){
	int s=1e9;
	for(int i1=i;i1<i+n;i1++){
		int l=j;
		int r=j+n-1;
		int k=log2(r-l+1);
		s=min(s,min(st1[i1][l][k],st1[i1][r-(1<<k)+1][k]));
	}
	return s;
}
int main(){
//	freopen(".in","r",stdin);
//	freopen(".out","w",stdout);
	int a,b,n;
	cin>>a>>b>>n;
	for(int i=1;i<=a;i++){
		for(int j=1;j<=b;j++){
			scanf("%d",&st1[i][j][0]);
			st2[i][j][0]=st1[i][j][0];
		}
	}
	for(int i=1;i<=a;i++){
		for(int j=1;j<=10;j++){
			for(int z=1;z+(1<<(j))-1<=b;z++){
				st1[i][z][j]=min(st1[i][z][j-1],st1[i][z+(1<<(j-1))][j-1]);
			}
		}
	}
	for(int i=1;i<=a;i++){
		for(int j=1;j<=10;j++){
			for(int z=1;z+(1<<(j))-1<=b;z++){
				st2[i][z][j]=max(st1[i][z][j-1],st1[i][z+(1<<(j-1))][j-1]);
			}
		}
	}
	int s=1e9;
	for(int i=1;i<=a-n+1;i++){
		for(int j=1;j<=b-n+1;j++){
			int l=j;
			int r=j+n-1;
			int k=log2(r-l+1);
			s=min(s,ma(i,j,n)-mi(i,j,n));
		}
	}
	cout<<s<<endl;
	return 0;
}


2024/9/24 22:18
加载中...