Cod sursa(job #1697305)

Utilizator minut1Baies Cosmin minut1 Data 1 mai 2016 15:35:51
Problema Plantatie Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.24 kb
#include <fstream>

using namespace std;

ifstream in("plantatie.in");
ofstream out("plantatie.out");

int mat[502][502][10], log[502][502], n, m, lin, col, lat;

int max(int a,int b) {
    if(a > b)
        return a;
    return b;
}

void preMat() {
    for(int i=1;i<=n;i++)
        for(int j=1;j<=n;j++)
           for(int k=1; (1<<k) <=j; k++)
            mat[i][j][k] = max(mat[i][j][k-1], mat[i][j - (1<<(k-1)) ][k-1]);
}

void preLog() {
    for(int i=1;i<=n;i++) {

        log[i][0] = 0;

        for(int j=2;j<=n;j++)
            log[i][j] = 1 + log[i][j/2];
    }
}

void read() {
    for(int i=1;i<=n;i++)
        for(int j=1;j<=n;j++)
            in>>mat[i][j][0];

    preMat();
    preLog();
}

void response() {
    int biggest, i, l, current;
    for(int nr=1;nr<=m;nr++) {
        in>>lin>>col>>lat;

        biggest = 0;
        i = lin;

        for(int j=col;j<=(col+lat);j++) {
            l = log[j][j-i+1];
            current = max(mat[j][j][l], mat[i+ (1<<l) - 1][j][l]);
            biggest = max(biggest, current);
        }
        out<<biggest<<"\n";
    }
}

int main()
{
    in>>n>>m;
    read();

    response();

    in.close();
    out.close();
    return 0;
}