Cod sursa(job #1158869)

Utilizator tudorv96Tudor Varan tudorv96 Data 29 martie 2014 10:15:44
Problema Plantatie Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.99 kb
#include <fstream>
#include <vector>
#include <iostream>
using namespace std;

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

const int N = 505;

int n, m, rmq[N][N][10], bp[N];

int main() {
    fin >> n >> m;
    for (int i = 1; i <= n; ++i)
        for (int j = 1; j <= n; ++j)
            fin >> rmq[i][j][0];
    for (int i = 2; i < N; ++i)
        bp[i] = bp[i / 2] + 1;
    for (int k = 1; (1 << k) <= n; ++k)
        for (int i = 1; i <= n - (1 << k) + 1; ++i)
            for (int j = 1; j <= n - (1 << k) + 1; ++j)
                rmq[i][j][k] = max (max(rmq[i][j][k-1], rmq[i + (1 << (k - 1))][j][k-1]), max (rmq[i][j + (1 << (k - 1))][k - 1], rmq[i + (1 << (k - 1))][j + (1 << (k - 1))][k-1]));
    for (int x, y, len, i = 0; i < m; ++i) {
        fin >> x >> y >> len;
        int pw = bp[len], dif = len - (1 << pw);
        fout << max(max (rmq[x][y][pw], rmq[x + dif][y][pw]), max(rmq[x][y + dif][pw], rmq[x + dif][y + dif][pw])) << "\n";
    }
}