Cod sursa(job #1900710)

Utilizator andru47Stefanescu Andru andru47 Data 3 martie 2017 15:59:26
Problema Plantatie Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.15 kb
#include <bits/stdc++.h>
using namespace std;
const int LOGMAX = int(log2(500.0)) , NMAX = 500 + 5;
int n,Q,rmq[LOGMAX + 5][NMAX][NMAX];
int main()
{
    freopen("plantatie.in", "r" ,stdin);
    freopen("plantatie.out", "w" ,stdout);

    int n , Q;
    scanf("%d %d\n", &n, &Q);
    for (int i = 1; i<=n; ++i)
        for (int j = 1; j<=n; ++j)
            scanf("%d", &rmq[0][i][j]);
    int logg = int(log2(1.0*n));
    for (int k = 1; k<=logg; ++k)
        for (int i = 1; i<= n - (1 << (k - 1)); ++i)
            for (int j = 1; j<=n - (1 << (k - 1)); ++j)
                rmq[k][i][j] = max(max(rmq[k - 1][i][j] , rmq[k-1][i + (1<<(k-1))][j]) , max(rmq[k-1][i][j + (1 << (k-1))] , rmq[k-1][i + (1<<(k-1))][j + (1 << (k-1))]));
    for ( ; Q; --Q)
    {
        int li,ci,lf,cf , lat;
        scanf("%d %d %d\n", &li, &ci, &lat);
        lf = li + lat - 1 , cf = ci + lat - 1;
        logg = int(log2(1.0*lat));
        int ans = max(max(rmq[logg][li][ci] , rmq[logg][lf - (1 << logg) + 1][ci]) , max(rmq[logg][li][cf - (1 << logg) + 1], rmq[logg][lf - (1 << logg) + 1][cf - (1 << logg) + 1]));
        printf("%d\n", ans);
    }
    return 0;
}