WA #8#11求调
查看原帖
WA #8#11求调
439165
小涛涛??楼主2024/8/2 20:25

代码如下 求求了QAQ

#include<bits/stdc++.h>
using namespace std;
const int maxn=1010;
int mina[maxn][maxn],maxa[maxn][maxn];
int temp[maxn][maxn];
int d[maxn][maxn];
void g_mi(int a,int b,int k) {
	for(int j=1; j<=a; j++) {
		int x=1;
		deque<int> Q;
		for(int i=1; i<=k; i++) {
			while(!Q.empty()&&Q.back()>d[j][i]) {
				Q.pop_back();
			}
			Q.push_back(d[j][i]);
		}
		temp[j][x++]=Q.front();
		for(int i=k+1; i<=a; i++) {
			int t=i-k;
			if(!Q.empty()&&t>0) {
				if(Q.front()==d[j][t]) {
					Q.pop_front();
				}
			}
			while(!Q.empty()&&d[j][i]<Q.back()) {
				Q.pop_back();
			}
			Q.push_back(d[j][i]);
			temp[j][x++]=Q.front();
		}
		while(!Q.empty()) {
			Q.pop_back();
		}
	}
	int l=b-k+1;
//	for(int i=1;i<=a;i++){
//		for(int j=1;j<=l;j++){
//			cout<<temp[i][j]<<" ";
//		}
//		cout<<"\n";
//	}
	for(int i=1; i<=l; i++) {
		int x=1;
		deque<int> Q;
		for(int j=1; j<=k; j++) {
			while(!Q.empty()&&Q.back()>temp[j][i]) {
				Q.pop_back();
			}
			Q.push_back(temp[j][i]);
		}
		mina[x++][i]=Q.front();
		for(int j=k+1; j<=a; j++) {
			int t=j-k;
			while(!Q.empty()&&temp[j][i]<Q.back()) {
				Q.pop_back();
			}
			if(!Q.empty()&&Q.front()==temp[t][i]) {
				Q.pop_front();
			}
			Q.push_back(temp[j][i]);
			mina[x++][i]=Q.front();
//			cout<<mina[x-1][i]<<' ';
		}
		while(!Q.empty()) {
			Q.pop_back();
		}
//		cout<<"\n";
	}
	return;
}
void g_ma(int a,int b,int k) {
	memset(temp,0,sizeof(temp));
	for(int j=1; j<=a; j++) {
		int x=1;
		deque<int> Q;
		for(int i=1; i<=k; i++) {
			while(!Q.empty()&&Q.back()<d[j][i]) {
				Q.pop_back();
			}
			Q.push_back(d[j][i]);
		}
		temp[j][x++]=Q.front();
		for(int i=k+1; i<=a; i++) {
			int t=i-k;
			if(!Q.empty()&&t>0) {
				if(Q.front()==d[j][t]) {
					Q.pop_front();
				}
			}
			while(!Q.empty()&&d[j][i]>Q.back()) {
				Q.pop_back();
			}
			Q.push_back(d[j][i]);
			temp[j][x++]=Q.front();
		}
		while(!Q.empty()) {
			Q.pop_back();
		}
	}
	int l=b-k+1;
//	for(int i=1;i<=a;i++){
//		for(int j=1;j<=l;j++){
//			cout<<temp[i][j]<<" ";
//		}
//		cout<<"\n";
//	}
	for(int i=1; i<=l; i++) {
		int x=1;
		deque<int> Q;
		for(int j=1; j<=k; j++) {
			while(!Q.empty()&&Q.back()<temp[j][i]) {
				Q.pop_back();
			}
			Q.push_back(temp[j][i]);
		}
		maxa[x++][i]=Q.front();
		for(int j=k+1; j<=a; j++) {
			int t=j-k;
			while(!Q.empty()&&temp[j][i]>Q.back()) {
				Q.pop_back();
			}
			if(!Q.empty()&&Q.front()==temp[t][i]) {
				Q.pop_front();
			}
			Q.push_back(temp[j][i]);
			maxa[x++][i]=Q.front();
//			cout<<maxa[x-1][i]<<' ';
		}
		while(!Q.empty()) {
			Q.pop_back();
		}
//		cout<<"\n";
	}
	return;
}
int main() {
//	freopen("test.txt","r",stdin);
	int a,b,n;
	cin>>a>>b>>n;
	for(int i=1; i<=a; i++) {
		for(int j=1; j<=b; j++) {
			cin>>d[i][j];
		}
	}
	g_mi(a,b,n);
//	for(int i=1; i<=a-n+1; i++) {
//		for(int j=1; j<=b-n+1; j++) {
//			cout<<mina[i][j]<<' ';
//		}
//		cout<<"\n";
//	}
	g_ma(a,b,n);
	int minc=1000000000;
	for(int i=1; i<=a-n+1; i++) {
		for(int j=1; j<=b-n+1; j++) {
			minc=min(minc,maxa[i][j]-mina[i][j]);
//			cout<<maxa[i][j]<<' ';
		}
//		cout<<"\n";
	}
//	cout<<"\n";
//	for(int i=1; i<=a-n+1; i++) {
//		for(int j=1; j<=b-n+1; j++) {
////			cout<<maxa[i][j]-mina[i][j]<<' ';
//		}
////		cout<<"\n";
//	}
	cout<<minc;
	return 0;
}
2024/8/2 20:25
加载中...