为什么题解里都要特判单点k<=ai,j<=2∗k的情况
不特判也没有影响吧
#include<bits/stdc++.h>
using namespace std;
int n,k;
long long a[2005][2005],s[2005][2005];
inline long long get(int a,int b,int c,int d){
return s[c][d]-s[c][b-1]-s[a-1][d]+s[a-1][b-1];
}
int up[2005],stk[2005],top;
int main(){
scanf("%d%d",&k,&n);
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
scanf("%lld",&a[i][j]);
}
}
for(int i=1;i<=n;i++)for(int j=1;j<=n;j++)s[i][j]=s[i][j-1]+a[i][j];
for(int i=1;i<=n;i++)for(int j=1;j<=n;j++)s[i][j]+=s[i-1][j];
for(int i=1;i<=n;i++){
for(int j=1;j<=n+1;j++){
if(a[i][j]<=2*k&&j<=n)up[j]++;
else up[j]=0;
while(top&&up[stk[top]]>=up[j]){
int x1=stk[top-1]+1,x2=j-1;
int h=i-up[stk[top]]+1;
if(get(h,x1,i,x2)>=k){
while(get(h,x1,i,x2)>2*k){
if(get(h,x1,h,x2)>2*k){
while(get(h,x1,h,x2)>2*k)x1++;
printf("%d %d %d %d\n",x1,h,x2,h);
return 0;
}
h++;
}
printf("%d %d %d %d\n",x1,h,x2,i);
return 0;
}
top--;
}
if(j<=n)stk[++top]=j;
}
}
puts("NIE");
return 0;
}