Cod sursa(job #1430307)

Utilizator depevladVlad Dumitru-Popescu depevlad Data 8 mai 2015 09:35:48
Problema Plantatie Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.1 kb
#include <fstream>
#include <algorithm>

using namespace std;

#define inFile "plantatie.in"
#define outFile "plantatie.out"
#define MAX_DIM 500
#define MAX_LOG 8

ifstream in(inFile);
ofstream out(outFile);

int RMQ[MAX_DIM + 1][MAX_DIM + 1][MAX_LOG + 1];
int Pow2[MAX_DIM + 1];

int main() {
    int N, Q, L, i, j, k, p, pow;
    
    in >> N >> Q;
    for(i = 1; i <= N; i++) {
        for(j = 0; (1<<j) <= i; j++);
        Pow2[i] = j-1;
        for(j = 1; j <= N; j++)
            in >> RMQ[i][j][0];
    }
    
    for(k = 1; (1<<k) <= N && k <= MAX_LOG; k++) 
        for(i = 1; i <= N-(1<<k)+1; i++) 
            for(j = 1; j <= N-(1<<k)+1; j++) {
                pow = 1<<(k-1);
                RMQ[i][j][k] = max(max(RMQ[i][j][k-1] , RMQ[i][j+pow][k-1]) , max(RMQ[i+pow][j][k-1] , RMQ[i+pow][j+pow][k-1]));
            }
                
    for(k = 1; k <= Q; k++) {
        in >> i >> j >> L;
        p = Pow2[L]; pow = 1 << p;
        out << max(max(RMQ[i][j][p] , RMQ[i][j+L-pow][p]) , max(RMQ[i+L-pow][j][p] , RMQ[i+L-pow][j+L-pow][p])) << '\n';
    }
    
    return 0;
}