Pagini recente » Cod sursa (job #753428) | Cod sursa (job #2786158) | Cod sursa (job #2753535) | Cod sursa (job #176339) | Cod sursa (job #1133661)
#include <cstdio>
const int Q=501;
int n,t;
int v[Q][Q];
int rmq[9][Q][Q],log[Q];
int max(int a, int b)
{
return a>b?a:b;
}
int max(int a, int b, int c, int d)
{
return max(a,b) > max(c,d) ? max(a,b) : max(c,d);
}
void make_rmq()
{
for(int i=2; i<=n; i++)
log[i]=log[i/2]+1;
for(int k=1; k<=log[n]; k++)
{
for(int i=1; i<=n-(1<<k)+1; i++)
{
for(int j=1; j<=n-(1<<k)+1; j++)
{
rmq[k][i][j]=max(rmq[k-1][i][j],rmq[k-1][i+(1<<(k-1))][j],rmq[k-1][i][j+(1<<(k-1))],rmq[k-1][i+(1<<(k-1))][j+(1<<(k-1))]);
}
}
}
}
int main()
{
freopen("plantatie.in","r",stdin);
freopen("plantatie.out","w",stdout);
scanf("%d %d\n",&n,&t);
for(int i=1; i<=n; i++)
{
for(int j=1; j<=n; j++)
{
scanf("%d",&v[i][j]);
rmq[0][i][j]=v[i][j];
}
}
make_rmq();
int a,b,k,lg;
for(int i=1; i<=t; i++)
{
scanf("%d %d %d\n",&a,&b,&k);
lg=log[k];
printf("%d\n",max(rmq[lg][a][b],rmq[lg][a+k-(1<<lg)][b],rmq[lg][a][b+k-(1<<lg)],rmq[lg][a+k-(1<<lg)][b+k-(1<<lg)]));
}
//return min(rmq[lg][sx][sy], rmq[lg][sx][fy-(1<<lg)+1], rmq[lg][fx-(1<<lg)+1][sy],rmq[lg][fx-(1<<lg)+1][fy- (1<<lg)+1]);
return 0;
}