0分求代码问题,玄关X2
查看原帖
0分求代码问题,玄关X2
712647
rhx103513yyds楼主2024/7/10 21:11
#include<bits/stdc++.h>
//#pragma GCC optimize(3)
using namespace std;
#define int long long
int n,m,c;
int a[1005][1005];
deque<int>d;
int ma[10][1005][1005];
int mi[10][1005][1005];
int ans=INT_MAX;
signed main(){
	ios::sync_with_stdio(0);
	cin.tie(0);
	cout.tie(0);
	cin>>n>>m>>c;
	for(int i=1;i<=n;i++)
		for(int j=1;j<=m;j++)
			cin>>a[i][j];
	for(int i=1;i<=n;i++){
		while(!d.empty())d.pop_back();
		for(int j=1;j<=m;j++){
			while(!d.empty()&&a[i][d.back()]<a[i][j])d.pop_back();
			if(!d.empty()&&d.front()==j-c)d.pop_front();
			d.push_back(j);
			if(j>=c)ma[0][i][j]=a[i][d.front()];
		}
	}
	for(int i=1;i<=n;i++){
		while(!d.empty())d.pop_back();
		for(int j=1;j<=m;j++){
			while(!d.empty()&&a[i][d.back()]>a[i][j])d.pop_back();
			if(!d.empty()&&d.front()==j-c)d.pop_front();
			d.push_back(j);
			if(j>=c)mi[0][i][j]=a[i][d.front()];
		}
	}
//	cout<<"\n";
//	for(int i=1;i<=n;i++){
//		for(int j=1;j<=m;j++){
//			cout<<ma[0][i][j]<<" ";
//		}
//		cout<<"\n";
//	}
//	cout<<"\n";
//	for(int i=1;i<=n;i++){
//		for(int j=1;j<=m;j++){
//			cout<<mi[0][i][j]<<" ";
//		}
//		cout<<"\n";
//	}
	for(int j=1;j<=m;j++){
		while(!d.empty())d.pop_back();
		for(int i=1;i<=n;i++){
			while(!d.empty()&&a[d.back()][j]<a[i][j])d.pop_back();
			if(!d.empty()&&d.front()==i-c)d.pop_front();
			d.push_back(i);
			if(i>=c)ma[1][i][j]=a[d.front()][j];
		}
	}
	for(int j=1;j<=m;j++){
		while(!d.empty())d.pop_back();
		for(int i=1;i<=n;i++){
			while(!d.empty()&&a[d.back()][j]>a[i][j])d.pop_back();
			if(!d.empty()&&d.front()==i-c)d.pop_front();
			d.push_back(i);
			if(i>=c)mi[1][i][j]=a[d.front()][j];
		}
	}
//	cout<<"\n";
//	for(int i=1;i<=n;i++){
//		for(int j=1;j<=m;j++){
//			cout<<ma[1][i][j]<<" ";
//		}
//		cout<<"\n";
//	}
//	cout<<"\n";
//	for(int i=1;i<=n;i++){
//		for(int j=1;j<=m;j++){
//			cout<<mi[1][i][j]<<" ";
//		}
//		cout<<"\n";
//	}
//	memset(ma[2],0x3f,sizeof(ma[2]));
//	memset(mi[2],0x3f,sizeof(mi[2]));
	for(int i=c;i<=n;i++){
		for(int j=c;j<=m;j++){
			for(int k=j;k<=j+c-1;k++){
				ma[2][i][j]=max(ma[2][i][j],ma[1][i][k]);
				mi[2][i][j]=min(mi[2][i][j],mi[1][i][k]);
			}
		}
	}
	for(int j=c;j<=m;j++){
		for(int i=c;i<=n;i++){
			for(int k=i;k<=i+c-1;k++){
				ma[2][i][j]=max(ma[2][i][j],ma[1][k][j]);
				mi[2][i][j]=min(mi[2][i][j],mi[1][k][j]);
			}
		}
	}
	for(int i=c;i<=n;i++){
		for(int j=c;j<=m;j++){
			ans=min(ans,ma[2][i][j]-mi[2][i][j]);
		}
	}
	cout<<ans;
	return 0;
}

/*

*/



2024/7/10 21:11
加载中...