Cod sursa(job #1252838)

Utilizator tester_31tester tester_31 Data 31 octombrie 2014 13:24:35
Problema Plantatie Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.92 kb
#include<stdio.h>
#include<algorithm>
#include<math.h>

using namespace std;

int a[508][508][13];
int lg[534];
int i,j,k,m,n,u;

int main()
{
    freopen("plantatie.in","r",stdin);
    freopen("plantatie.out","w",stdout);
    scanf("%d%d",&n,&m);

    for (i=1; i<=n; ++i)
        for (j=1; j<=n; ++j) scanf("%d",&a[i][j][0]);

    for (i=2; i<=n; ++i) lg[i]=lg[i/2]+1;

    for (k=1; (1<<k)<=n; ++k)
    {
        int pr=(1<<k-1);
        for (i=1; i+pr-1<=n; ++i)
          for (j=1; j+pr-1<=n; ++j)
            {

                a[i][j][k]=max(max(a[i][j][k-1],a[i][j+pr][k-1]),max(a[i+pr][j][k-1],a[i+pr][j+pr][k-1]));
            }}
    int x,y,length;
    while (m--)
    {
        scanf("%d%d%d",&x,&y,&length);
        int pr=lg[length];
        u=1<<pr;
        printf("%d\n",max(max(a[x][y][pr],a[x][y+length-u][pr]),max(a[length+x-u][y][pr],a[length+x-u][pr+y-u][pr])));
    }
return 0;
}