#include <bits/stdc++.h>
#define int long long
#define y1 ________
#define y2 __________
using namespace std;
const int N = 5e2+5,M = 1e6+5;
int n,m,a[N][N];
struct node{
int t,op,x1,y1,x2,y2,k;
}q[M],ql[M],qr[M];
int t[N][N];
#define lowbit(x) (x&(-x))
inline void add(int x,int y,int v)
{
for(int i = x;i<=n;i+=lowbit(i))
for(int j = y;j<=n;j+=lowbit(j))
t[i][j]+=v;
}
inline int ask(int x,int y)
{
int res = 0;
for(int i = x;i;i-=lowbit(i))
for(int j = y;j;j-=lowbit(j))
res+=t[x][y];
return res;
}
int cnt,ans[M];
void solve(int l,int r,int x,int y)
{
if(l==r)
{
for(int i = x;i<=y;i++)
if(q[i].op==1) ans[q[i].t] = l;
return;
}
int mid = (l+r)/2;
int cntl = 0,cntr = 0,tmp;
for(int i = x;i<=y;i++)
{
if(q[i].op==0)
{
if(q[i].k<=mid) ql[++cntl] = q[i],add(q[i].x1,q[i].y1,1);
else qr[++cntr] = q[i];
}
else
{
tmp = ask(q[i].x2,q[i].y2)-ask(q[i].x2,q[i].y1-1)-ask(q[i].x1-1,q[i].y2)+ask(q[i].x1-1,q[i].y1-1);
if(tmp<q[i].k) q[i].k-=tmp,qr[++cntr] = q[i];
else ql[++cntl] = q[i];
}
}
// cout<<"ok\n";
for(int i = 1;i<=cntl;i++)
{
q[x+i-1] = ql[i];
if(ql[i].op==0) add(ql[i].x1,q[i].y1,-1);
}
for(int i = 1;i<=cntr;i++)
q[x+cntl+i-1] = qr[i];
if(cntl) solve(l,mid,x,x+cntl-1);
if(cntr) solve(mid+1,r,x+cntl,y);
}
signed main()
{
// freopen(".in","r",stdin);
// freopen(".out","w",stdout);
ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
cin>>n>>m;
for(int i = 1;i<=n;i++)
for(int j = 1;j<=n;j++)
cin>>a[i][j],q[++cnt] = (node){0,0,i,j,i,j,a[i][j]};
for(int i = 1;i<=m;i++)
{
int a,b,c,d,k;
cin>>a>>b>>c>>d>>k;
q[++cnt] = (node){i,1,a,b,c,d,k};
}
solve(0,1e9,1,cnt);
for(int i = 1;i<=m;i++)
cout<<ans[i]<<'\n';
return 0;
}
全 WA,对了半天题解也没找到问题。