Cod sursa(job #155239)

Utilizator RobytzzaIonescu Robert Marius Robytzza Data 11 martie 2008 20:20:23
Problema Plantatie Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.96 kb
#include <stdio.h>
#define MAX 501

long N, M;
long v[MAX][MAX][10];

long max (long a1,long a2,long a3,long a4) {
    if (a1<a2)
	a1=a2;
    if (a1<a3)
	 a1=a3;
    if (a1<a4)
	a1=a4;
    return a1;
}

void calc ()
{
    long i,j,k,p;
    for (k=1; (1<<k)<=N; ++k) 
     {
	p = (1<<(k-1));
	 for (i=1; i+(p<<1)-1<=N; ++i)
	    for (j=1; j+(p<<1)-1<=N; ++j)
		v[i][j][k]=max(v[i][j][k-1],v[i+p][j][k-1],v[i][j+p][k-1],v[i+p][j+p][k-1]);
    }
}

int main ()
{
    freopen ("plantatie.in","r",stdin);
    freopen ("plantatie.out","w",stdout);
    scanf("%ld %ld", &N, &M);
    for (long l=1; l<=N; ++l)
	for (long c=1; c<=N; ++c)
	    scanf("%ld",&v[l][c]);

    calc();
    long x,y,z,i,p;
    while (M--)
    {
	scanf("%ld %ld %ld", &x, &y, &z);
	for (i=0;(1<<(i+1))<=z;++i);
	p=(1<<i);
	printf("%ld\n",max(v[x][y][i],v[x+z-p][y][i],v[x][y+z-p][i],v[x+z-p][y+z-p][i]));
    }

    fclose(stdin);
    fclose(stdout);
    return 0;
}