Cod sursa(job #1231831)

Utilizator cojocarugabiReality cojocarugabi Data 21 septembrie 2014 17:04:42
Problema Plantatie Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.84 kb
# include <bits/stdc++.h>
# define nmax 505
# define lgmax 10
using namespace std;
int S[nmax][nmax][lgmax];
int Lg[nmax];
ifstream fi("plantatie.in");
ofstream fo("plantatie.out");
int main(void)
{
    int n,m;
    fi>>n>>m;
    for (int i = 1;i <= n;++ i)
        for (int j = 1;j <= n;++ j)
            fi>>S[i][j][0];
    for (int i = 2;i <= n;++ i) Lg[i]=Lg[i/2]+1;
    int x,y,k,p;
    for (int k = 1 , p;k <= Lg[n];++ k)
        {
            p=(1<<k)>>1;
            for (int i = 1;i+p-1 <= n;++ i)
                for (int j = 1;j+p-1 <= n;++ j)
                     S[i][j][k]=max(max(S[i][j][k-1],S[i][j+p][k-1]),max(S[i+p][j][k-1],S[i+p][j+p][k-1]));
        }
    while (m--) fi>>x>>y>>k,p=1<<Lg[k],fo<<max(max(S[x][y][Lg[k]],S[x][y+k-p][Lg[k]]),max(S[x+k-p][y][Lg[k]],S[x-k+p][y+k-p][Lg[k]]))<<'\n';
    return 0;
}