Cod sursa(job #1280654)

Utilizator TarabanDragosTaraban Dragos-Petru TarabanDragos Data 2 decembrie 2014 12:16:27
Problema Plantatie Scor 10
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.11 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){
    int a = P[k] - 1;
    fout << max(A[i][j][a], max(A[i+k-(1<<a)][j][a], max(A[i][j+k-(1<<a)][k],A[i+k-(1<<a)][j+k-(1<<a)][a])))<<'\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]=P[i/2]+1;
    for(k = 1; (1 << k-1) <= n; k ++){
    int u = 1 << (k - 1);
        for(i = 1; i +u-1 <= n; i ++)
            for(j = 1; j+u-1<= n; j ++){
A[i][j][k] = max(A[i][j][k - 1],max(A[i + u][j][k - 1],max(A[i][j + u][k - 1], A[i + u][j + u][k - 1])));
            }
}
/*for(i=1;i<=P[n];i++){
        for(j=1;j<=n;j++){
            for(int ii=1;ii<=n;ii++){
                fout<<A[j][ii][i]<<" ";
            }
            fout<<"\n";
        }
        fout<<"\n";
    }
*/
for(int y = 1; y <= m; y ++){
        fin >> i >> j >> kq;
        query(i,j,kq);
    }
    return 0;
}