求调
查看原帖
求调
1020186
zhouxianzhuo楼主2024/5/28 13:43

由于码风问题,自己找不出来

#include<bits/stdc++.h>
using namespace std;
int a,b,n,g[1010][1010],ans=0x3f3f3f3f;
int hi1=1,ti1,qi1[1010][1010],gi[1010][1010];
int ha1=1,ta1,qa1[1010][1010],ga[1010][1010];
int hi2=1,ti2,qi2[1010][1010];
int ha2=1,ta2,qa2[1010][1010];
int main(){
	scanf("%d%d%d",&a,&b,&n);
	for(int i=1;i<=a;i++)
	{
		for(int j=1;j<=b;j++)
			scanf("%d",&g[i][j]);
	}
	for(int i=1;i<=a;i++)
	{
		for(int j=1;j<=b;j++)
		{
			while(hi1<=ti1&&qi1[i][hi1]<=j-n)
				hi1+=1;
			while(hi1<=ti1&&g[i][qi1[i][ti1]]>=g[i][j])
				ti1-=1;
			ti1+=1;
			qi1[i][ti1]=j;
			gi[i][j]=qi1[i][hi1];
			while(ha1<=ta1&&qa1[i][ha1]<=j-n)
				ha1+=1;
			while(ha1<=ta1&&g[i][qa1[i][ta1]]<=g[i][j])
				ta1-=1;
			ta1+=1;
			qa1[i][ta1]=j;
			ga[i][j]=qa1[i][ha1];
		}
	}
	for(int j=1;j<=b;j++)
	{
		for(int i=1;i<=a;i++)
		{
			while(hi2<=ti2&&qi2[hi2][j]<=i-n)
				hi2+=1;
			while(hi2<=ti2&&gi[qi2[ti2][j]][j]>=gi[i][j])
				ti2-=1;
			ti2+=1;
			qi2[ti2][j]=i;
			while(ha2<=ta2&&qa2[ha2][j]<=i-n)
				ha2+=1;
			while(ha2<=ta2&&ga[qa2[ta2][j]][j]<=ga[i][j])
				ta2-=1;
			ta2+=1;
			qa2[ta2][j]=i;
			if(i>=n&&j>=n)ans=min(ans,ga[qa2[ha2][j]][j]-gi[qi2[hi2][j]][j]);
		}
	}
	printf("%d",ans);
    return 0;
}

样例输出 -1

2024/5/28 13:43
加载中...