Cod sursa(job #781078)

Utilizator cippyApetrei Ciprian cippy Data 23 august 2012 09:51:05
Problema Plantatie Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.95 kb
#include <cstdio>
int n,m;
int a[10][510][510];
int log[510];
 
void citire()
{
    freopen("plantatie.in","r",stdin);
    freopen("plantatie.in","w",stdout);
    scanf("%d %d", &n, &m);
    for (int i=1;i<=n;++i)
        for (int j=1;j<=n;++j)
            scanf("%d", &a[0][i][j]);
}
 
inline int max(int a, int b) { return a>b?a:b; }

int query(int i,int j,int k)
{
    int dis=log[k];
    return 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])); 
}
void solve()
{
    int i,j,k;
    for (i=2;i<=n;++i) log[i]=log[i>>1]+1;

    for(k=1;(1<<k)<=n;++k)
        for (i=n-(1<<k)+1;i>=1;--i)
            for (j=n-(1<<k)+1;j>=1;--j)
                a[k][i][j]=max(max(a[k-1][i][j],a[k-1][i][j+(1<<(k-1))]),max(a[k-1][i+(1<<(k-1))][j],a[k-1][i+(1<<(k-1))][j+(1<<(k-1))]));
    while(m--)
        scanf("%d %d %d", &i, &j, &k),printf("%d\n",query(i,j,k));
 
}  
int main()
{
citire();
solve();
return 0;
}