Cod sursa(job #3130503)

Utilizator TirilaPatricTirila Patric-Gabriel TirilaPatric Data 17 mai 2023 21:34:24
Problema Plantatie Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.15 kb
#include <iostream>
#include <fstream>
#include <cmath>
#include <iomanip>
using namespace std;

int rmq[501][501][9], logg2[100003];

int max4(int a, int b, int c, int d){
    a = a>b ? a : b;
    c = c>d ? c : d;
    return a>c ? a : c;
}

void populateRMQ(int n){
    for(int j=1; pow(2, j) <= n; j++){
        int p = pow(2, j-1);
        for(int i=1; i + p*2 - 1 <= n; i++){
            for(int k=1; k + p*2 - 1 <= n; k++){
                rmq[i][k][j] = max4(rmq[i+p][k][j-1], rmq[i][k+p][j - 1], rmq[i+p][k+p][j-1], rmq[i][k][j - 1]);
            }
        }
    }
}

int main(){
    ifstream f("plantatie.in");
    ofstream g("plantatie.out");

    int n, m, a, b, c;
    f>>n>>m;

    logg2[1] = 0;
    for(int i = 2; i <= n; i++)
        logg2[i] = 1 + logg2[i / 2];

    for(int i=1; i<=n; i++){
        for(int j=1; j<=n; j++){
            f>>rmq[i][j][0];
        }
    }

    populateRMQ(n);

    while(m>0) {
        f >> a >> b >> c;
        int k = logg2[c], p = pow(2, k);
        g << max4(rmq[a][b][k], rmq[a][b - p + c][k], rmq[a - p + c][b][k], rmq[a - p + c][b - p + c][k])
          << endl;
        m--;
    }

    f.close();
    g.close();

    return 0;
}