Cod sursa(job #2052426)

Utilizator circeanubogdanCirceanu Bogdan circeanubogdan Data 30 octombrie 2017 16:34:26
Problema Plantatie Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.34 kb
#include <fstream>
#define DIM 502

using namespace std;

ifstream f("plantatie.in");
ofstream g("plantatie.out");

int n, m, d[11][DIM][DIM], maxim, p[DIM], x, y, l, put;

void Maxx(int k, int i, int j){
    int i2 = i + (1 << (k - 1));
    int j2 = j + (1 << (k - 1));
    maxim = -1;

    if(d[k - 1][i][j] > maxim)
        maxim = d[k - 1][i][j];
    if(d[k - 1][i][j2] > maxim)
        maxim = d[k - 1][i][j2];
    if(d[k - 1][i2][j] > maxim)
        maxim = d[k - 1][i2][j];
    if(d[k - 1][i2][j2] > maxim)
        maxim = d[k - 1][i2][j2];

    d[k][i][j] = maxim;
}

void Maxx2(int k, int i, int j, int l){
    int i2 = i + l - 1;
    int j2 = j + l - 1;
    maxim = -1;

    maxim = max(d[k][i][j], max(d[k][i][j2 - (1 << k) + 1], max(d[k][i2 - (1 << k) + 1][j], d[k][i2 - (1 << k) + 1][j2 - (1 << k) + 1])));

}

int main(){

    f>>n>>m;
    for(int i = 1; i <= n; ++ i)
        for(int j = 1; j <= n; ++ j)
            f>>d[0][i][j];

    for(int k = 1; (1 << k) <= n; ++ k)
        for(int i = 1; i <= n; ++ i)
            for(int j = 1; j <= n; ++ j)
                Maxx(k, i, j);

    for(int i = 2; i <= n; ++ i){
        p[i] = 1 + p[i / 2];
    }

    for(int i = 1; i <= m; ++ i){
        f>>x>>y>>l;
        put = p[l];
        Maxx2(put, x, y, l);
        g<<maxim<<'\n';
    }
    return 0;
}