Cod sursa(job #3128799)

Utilizator JohnnyFortaPascu Ioan JohnnyForta Data 10 mai 2023 22:20:23
Problema Plantatie Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.56 kb
#include <fstream>
#include <math.h>
#include <iostream>

using namespace std;

int rmq[10][500][500];
int plant[500][500];
int n;
ifstream in("plantatie.in");
ofstream out("plantatie.out");

int maxim(int a, int b, int c, int d){
    if((a > b) && (a > c) && (a > d)){
        return a;
    }
    if((b > c) && (b > d)){
        return b;
    }
    if(c > d){
        return c;
    }
    return d;
}

void readPlantatie(){
    int x;
    for(int i = 0; i < n; i++){
        for(int j = 0; j < n; j++){
            in>>x;
            plant[i][j] = x;
            rmq[0][i][j] = x;
        }
    }
}

void populateRmq(){
    for(int i = 1; i <= int(log2(n)); i++){
        for(int j = 0; j < n; j++){
            for(int k = 0; k < n; k++){
                int offset = pow(2, i - 1);
                rmq[i][j][k] = maxim(rmq[i - 1][j][k], rmq[i - 1][j + offset][k], rmq[i - 1][j][k + offset], rmq[i - 1][j + offset][k + offset]);
            }
        }
    }
}

int interogate(int i, int j, int l){
    if(int(log2(l)) == log2(l)){
        return rmq[int(log2(l))][i][j];
    }
    int power = int(log2(l));
    int lowest2pow = pow(2, power);
    return maxim(rmq[power][i][j], rmq[power][i + l - lowest2pow][j], rmq[power][i][j + l  - lowest2pow], rmq[power][i + l - lowest2pow][j + l - lowest2pow]);
}

int main(){
    int m, x, y, l;
    in>>n>>m;
    readPlantatie();
    populateRmq();
    for(int i = 0; i < m; i++){
        in>>x>>y>>l;
        out<<interogate(x - 1, y - 1, l)<<endl;
    }
    in.close();
    out.close();
}