0 pts求调
查看原帖
0 pts求调
979363
zxr_zwgh楼主2024/7/26 09:33

样例负数qwq

#include<bits/stdc++.h>
using namespace std;
int a[1005][1005],maxx;
int mn_min[1005][1005],mn_max[1005][1005]; 
int r_min[1005][1005],r_max[1005][1005];
deque<int> q;
int minn=0x3f3f3f3f;
int main(){
    int n,m,k;
    cin>>n>>m>>k;
    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++){
		q.clear();
	    for(int j=1;j<=m;j++){
    		while(!q.empty()&&a[i][q.back()]>=a[i][j]){
    			q.pop_back();
    		}
    		q.push_back(j);
    		if(q.front()<j-k+1){
    			q.pop_front();
    		}
    		if(j>=k){
                r_min[i][j]=a[i][q.front()];
    		}
	    }
	}
	for(int j=k;j<=m;j++){
		q.clear();
	    for(int i=1;i<=n;i++){
    		while(!q.empty()&&r_min[q.back()][j]>=r_min[i][j]){
    			q.pop_back();
    		}
    		q.push_back(i);
    		if(q.front()<i-k+1){
    			q.pop_front();
    		}
    		if(j>=k){
                mn_min[i][j]=r_min[q.front()][j];
    		}
	    }
	}
	for(int i=1;i<=n;i++){
		q.clear();
	    for(int j=1;j<=m;j++){
    		while(!q.empty()&&a[i][q.back()]<=a[i][j]){
    			q.pop_back();
    		}
    		q.push_back(j);
    		if(q.front()<j-k+1){
    			q.pop_front();
    		}
    		if(j>=k){
                r_max[i][j]=a[i][q.front()];
    		}
	    }
	}
	for(int j=k;j<=m;j++){
		q.clear();
	    for(int i=1;i<=n;i++){
    		while(!q.empty()&&a[q.back()][j]>=a[i][j]){
    			q.pop_back();
    		}
    		q.push_back(i);
    		if(q.front()<j-k+1){
    			q.pop_front();
    		}
    		if(j>=k){
                mn_max[i][j]=r_max[q.front()][j];
                minn=min(minn,mn_max[i][j]-mn_min[i][j]);
    		}
	    }
	}
//	for(int i=1;i<=n;i++){
//		for(int j=1;j<=m;j++){
//			cout<<r_min[i][j]<<" ";
//		}
//		cout<<endl;
//	}
//	cout<<endl;
//	for(int i=1;i<=n;i++){
//		for(int j=1;j<=m;j++){
//			cout<<r_max[i][j]<<" ";
//		}
//		cout<<endl;
//	}
	cout<<minn;
    return 0;
}
/*大概的思路是:
先用单调队列求出r_min[i][j]表示a[i][j]到a[i][j+y-1]中的最小值
再用单调队列求出mn[i][j]表示r_min[i][j]到r_min[i+x-1][j] 中的最小值 */
2024/7/26 09:33
加载中...