Cod sursa(job #1430269)

Utilizator depevladVlad Dumitru-Popescu depevlad Data 8 mai 2015 01:26:37
Problema Plantatie Scor 10
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.23 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 A[MAX_DIM + 1][MAX_DIM + 1];
int RMQ[MAX_DIM + 1][MAX_DIM + 1][MAX_LOG + 1];
int MaxP2[MAX_DIM];

int MAX(int A, int B, int C, int D) {
    return max(max(A,B), max(C,D));
}

int main() {
    int N, Q, x1, y1, L, i, j, k, P2;
    
    in >> N >> Q;
    for(i = 1; i <= N; i++) {
        MaxP2[i] = MaxP2[i-1];
        if(i & (i-1) == 0) MaxP2[i]++;
        for(j = 1; j <= N; j++) {
            in >> A[i][j];
            RMQ[i][j][0] = A[i][j];
        }
    }
    
    for(k = 1; (1<<k) <= N; k++) 
        for(i = 1; i <= N-(1<<k)+1; i++) 
            for(j = 1; j <= N-(1<<k)+1; j++) 
                RMQ[i][j][k] = MAX(RMQ[i][j][k-1]  ,  RMQ[i][j+(1<<(k-1))][k-1]  ,  RMQ[i+(1<<(k-1))][j][k-1]  ,  RMQ[i+(1<<(k-1))][j+(1<<(k-1))][k-1]);
                
    for(k = 1; k <= Q; k++) {
        in >> i >> j >> L;
        P2 = MaxP2[L];
        out << MAX(RMQ[i][j][P2]  ,  RMQ[i][j+L-(1<<P2)][P2]  ,  RMQ[i+L-(1<<P2)][j][P2]  ,  RMQ[i+L-(1<<P2)][j+L-(1<<P2)][P2]) << '\n';
    }
    
    return 0;
}