st表:wa10分,为什么看不了错了的数据啊
查看原帖
st表:wa10分,为什么看不了错了的数据啊
415354
dadaaa楼主2021/12/17 22:58
#include<iostream>
#include<cstdio>
using namespace std;
int log (int q){
	for(int i=7;i;i--)
		if(q>(1<<i))
			return i;
	return 0;
} 

int a,b,n,mp[1010][1010],f1[1010][1010],f2[1010][1010];

int main() {
	cin>>a>>b>>n;
	for(int i=1;i<=a;i++)
		for(int j=1;j<=b;j++){
			cin>>mp[i][j];
			f1[i][j]=mp[i][j];
			f2[i][j]=f1[i][j];
		}
	for(int k=1;k<=log(n);k++){
		for(int i=1;i<=a-(1<<k)+1;i++){
			for(int j=1;j<=b-(1<<k)+1;j++){
				f1[i][j]=max(f1[i][j],max(f1[i+(1<<k)][j],max(f1[i][j+(1<<k)],f1[i+(1<<k)][j+(1<<k)])));
				f2[i][j]=min(f1[i][j],min(f2[i+(1<<k)][j],min(f2[i][j+(1<<k)],f2[i+(1<<k)][j+(1<<k)])));
			}
		}
	}
	
	int ans=0x3fffff,ans1,ans2;
	for(int i=1;i<=a-n+1;i++){
		for(int j=1;j<=b-n+1;j++){	
		ans1=max(f1[i][j],max(f1[i+n-(1<<log(n))][j],max(f1[i][j+n-(1<<log(n))],f1[i+n-(1<<log(n))][j+n-(1<<log(n))])));
		ans2=min(f1[i][j],min(f2[i+n-(1<<log(n))][j],min(f2[i][j+n-(1<<log(n))],f2[i+n-(1<<log(n))][j+n-(1<<log(n))])));
		ans=min(ans,ans1-ans2);
		}
	}
	cout<<ans;
	return 0;
}
2021/12/17 22:58
加载中...