Cod sursa(job #2233730)

Utilizator oso.andinoooIonut Stan oso.andinooo Data 24 august 2018 12:05:55
Problema Plantatie Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.14 kb
#include <bits/stdc++.h>
using namespace std;

const int N = 505, LG = 9;
int rm[LG][N][N], v[N];

int main() {
    freopen("plantatie.in", "r", stdin);
    freopen("plantatie.out", "w", stdout);
    int n, m, x, y, w, j1, j2;
    scanf("%d %d", &n, &m);

    for (int i = 2; i <= n; i++) {
         v[i] = v[i / 2] + 1; }
//    v[1] = 1;
    for (int i = 1; i <= n; i++)
        for (int j = 1; j <= n; j++){
            scanf("%d", &rm[0][i][j]); }

    for (int lg = 1; lg <= v[n]; lg++)
            for (int i = 1; i + (1 << lg) - 1 <= n; i++)
                for (int j = 1; j + (1 << lg) - 1 <= n; j++) {
                    j1 = max(rm[lg - 1][i][j], rm[lg - 1][i][j + (1 << (lg - 1))]);
                    j2 = max(rm[lg - 1][i + (1 << (lg - 1))][j], rm[lg - 1][i + (1 << (lg - 1))][j + (1 << (lg - 1))]);
                    rm[lg][i][j] = max(j1, j2); }

    for (int i = 1; i <= m; i++) {
        scanf(" %d %d %d ", &x, &y, &w);

        j1 = max(rm[v[w]][x][y], rm[v[w]][x][y + w - (1 << v[w])]);
        j2 = max(rm[v[w]][x + w - (1 << v[w])][y], rm[v[w]][x + w - (1 << v[w])][y + w - (1 << v[w])]);
        printf("%d\n", max(j1, j2)); }

    return 0; }