Pagini recente » Cod sursa (job #2074148) | Cod sursa (job #2503076)
#include <cstdio>
#include <iostream>
using namespace std;
long long n,m,i,j,k,p,put,pu[505],rmq[505][505][12];
int main()
{
freopen("plantatie.in","r",stdin);
freopen("plantatie.out","w",stdout);
scanf("%lld%lld",&n,&m);
for(i=2; i<=n; i*=2) pu[i]++;
for(i=1; i<=n; i++) pu[i]+=pu[i-1];
for(i=1; i<=n; i++)
for(j=1; j<=n; j++)
scanf("%lld",&rmq[i][j][0]);
for(p=2; p<=n; p*=2)
for(i=1; i<=n-p+1; i++)
for(j=1; j<=n-p+1; j++)
{
long long a,b;
a=max(rmq[i][j][pu[p]-1],rmq[i][j+p/2][pu[p]-1]);
b=max(rmq[i+p/2][j][pu[p]-1],rmq[i+p/2][j+p/2][pu[p]-1]);
rmq[i][j][pu[p]]=max(a,b);
}
/*for(p=1; p<=n; p*=2)
{
for(i=1; i<=n; i++)
{
for(j=1; j<=n; j++)
g<<rmq[i][j][pu[p]]<<" ";
g<<'\n';
}
g<<'\n';
}*/
while(m)
{
m--;
scanf("%lld%lld%lld",&i,&j,&k);
p=pu[k];
put=p;
p=1<<put;
long long a,b;
a=max(rmq[i][j][put],rmq[i+k-p][j][put]);
b=max(rmq[i][j+k-p][put],rmq[i+k-p][j+k-p][put]);
printf("%lld\n",max(a,b));
}
return 0;
}