Cod sursa(job #1412874)

Utilizator robertstrecheStreche Robert robertstreche Data 1 aprilie 2015 17:01:41
Problema Plantatie Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.07 kb
#include <cstdio>
#include <cmath>

#define NMAX 505
#define LOGMAX 13

using namespace std;

int n,l,c,val,dim,query;
int best[LOGMAX][NMAX][NMAX];

inline int maxim(int a,int b)
{
    return a<b?b:a;
}
int main()
{
    freopen("plantatie.in","r",stdin);
    freopen("plantatie.out","w",stdout);
    scanf("%d %d",&n,&query);
    for (int i=1;i<=n;i++)
     for (int j=1;j<=n;j++)
      {
          scanf("%d",&val);
          best[0][i][j]=val;
      }
    for (int l=1;l<=12;l++)
     for (int i=1;i<=n;i++)
      for (int j=1;j<=n;j++)
        if (i+(1<<l)<=n+1 && j+(1<<l)<=n+1)
         best[l][i][j]=maxim(maxim(best[l-1][i][j],best[l-1][i][j+(1<<(l-1))]),maxim(best[l-1][i+(1<<(l-1))][j],best[l-1][i+(1<<(l-1))][j+(1<<(l-1))]));

    for (int q=1;q<=query;q++)
    {
        int i,j;
        scanf("%d %d %d",&i,&j,&dim);
        int l=log2(dim-1);
        printf("%d\n",maxim(maxim(best[l][i][j],best[l][i][j+dim-(1<<l)]),maxim(best[l][i+dim-(1<<l)][j],best[l][i+dim-(1<<l)][j+dim-(1<<l)])));
    }

    fclose(stdin);
    fclose(stdout);
}