Cod sursa(job #780851)

Utilizator cippyApetrei Ciprian cippy Data 22 august 2012 12:19:29
Problema Plantatie Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.06 kb
#include<stdio.h>
#include<algorithm>
using namespace std;
#define maxn 505
#define maxlog 10

int n,m,a[maxlog][maxn][maxn],log[maxn];
int i,j,k;
void citire()
{
    int i,j;
    freopen("plantatie.in","r",stdin);
    scanf("%d%d",&n,&m);
    for(i=1;i<=n;++i){
        for(j=1;j<=n;++j)
            scanf("%d",&a[0][i][j]);
    }
}
void make()
{
   for(i=2;i<=n;++i)
        log[i]=log[i>>1]+1;
   int aux;
   for(k=1,aux=1<<k;aux<=n;++k,aux=1<<k)
       for(i=n-aux+1;i;--i)
           for(j=n-aux+1;j;--j)
               a[k][i][j]=max( max( a[k-1][i][j], a[k-1][i][j+(aux-1)]), max( a[k-1][i+(aux-1)][j], a[k-1][i+(aux-1)][j+(aux-1)]) );  
}

int query(int i,int j,int k)
{
    int dis=log[k];
    int aux=max( max( a[dis][i][j], a[dis][i+k-(1<<dis)][j+k-(1<<dis)]), max( a[dis][i][j+k-(1<<dis)], a[dis][i+k-(1<<dis)][j])); 
    printf("%d",aux);
    return aux;
}

void afisare()
{
    freopen("plantatie.out","w",stdout);
    while(--m)
        scanf("%d%d%d",&i,&j,&k),printf("%d",query(i,j,k));
}

int main()
{
    citire();
    make(); 
    afisare();
    return 0;    
}