Cod sursa(job #2834828)

Utilizator divadddDavid Curca divaddd Data 17 ianuarie 2022 19:03:19
Problema Plantatie Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.35 kb
#include <iostream>
#include <fstream>
#define MAX 502
using namespace std;
long long n,m,v[12][MAX][MAX],x,y,k,e[MAX];

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

long long maxim(long long a, long long b, long long c, long long d){
    long long ans = max(a, b);
    ans = max(ans, c);
    ans = max(ans, d);
    return ans;
}

int main()
{
    fin >> n >> m;
    for(int i = 1; i <= n; i++){
        for(int j = 1; j <= n; j++){
            fin >> v[0][i][j];
        }
    }
    /// precalculam vectorul e
    e[1] = 0;
    for(int i = 2; i <= n; i++){
        e[i] = 1 + e[i/2];
    }

    /// precalculam vectorul v
    for(int i = 1; (1<<i) <= n; i++){
        /// patrat cu latura i
        for(int j = 1; j <= n-(1<<i)+1; j++){
            for(int k = 1; k <= n-(1<<i)+1; k++){
                /// coltul in (j, k)
                int j2 = j+(1<<(i-1));
                int k2 = k+(1<<(i-1));
                v[i][j][k] = maxim(v[i-1][j][k], v[i-1][j2][k], v[i-1][j][k2], v[i-1][j2][k2]);
            }
        }
    }

    for(int i = 1; i <= m; i++){
        fin >> x >> y >> k;
        int exp = e[k];
        int len = (1<<exp);

        int x2 = x+k-len;
        int y2 = y+k-len;

        fout << maxim(v[exp][x][y], v[exp][x2][y], v[exp][x][y2], v[exp][x2][y2]) << "\n";
    }
    return 0;
}