Cod sursa(job #1280519)

Utilizator CiurezAndreiCiurez Marius-Andrei CiurezAndrei Data 2 decembrie 2014 01:08:08
Problema Plantatie Scor 10
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.08 kb
#include <fstream>

using namespace std;
ifstream fin("plantatie.in");
ofstream fout("plantatie.out");

int n, m, i, j, k, kq;
int A[550][550][12];
int P[510];

void query(int i, int j, int k){

    fout << max(A[i][j][P[k]], max(A[i+k-(1<<P[k])][j][P[k]], max(A[i][j+k-(1<<P[k])][k],A[i+k-(1<<P[k])][j+k-(1<<P[k])][P[k]])))<<'\n';
}
int main()
{
    fin >> n >> m;
    for(i = 1; i <= n; i ++)
        for(j = 1; j <= n; j ++)
            fin >> A[i][j][0];
    P[1] = 0;
    for(i = 2; i <= n; i ++)
        P[i] = 1 + P[i / 2];

    for(k = 1; (1 << k) <= n; k ++)
        for(i = 1; i + (1 << k - 1) <= n; i ++)
            for(j = 1; j + (1 << k - 1) <= n; j ++){
                A[i][j][k] = A[i][j][k - 1];
                if(i + (1 << (k - 1)) <= n && j + (1 << (k - 1)) <= n)
                A[i][j][k] = max(A[i + (1 << (k - 1))][j][k - 1],max(A[i][j + (1 << (k - 1))][k - 1], A[i + (1 << (k - 1))][j + (1 << (k - 1))][k - 1]));
            }
    for(int y = 1; y <= m; y ++){
        fin >> i >> j >> kq;
        query(i,j,kq);

    }

    return 0;
}