Cod sursa(job #3231642)

Utilizator bravo_tiramisutiramisu bravo_tiramisu Data 27 mai 2024 15:08:42
Problema Plantatie Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.24 kb
#include <iostream>
#include <fstream>
#include <cmath>

using namespace std;

#define NMAX 505
#define MMAX 75005

int C[NMAX][NMAX][15], N, M;

int max(int a, int b, int c, int d)
{
    if(a > b); else a = b;
    if(a > c); else a = c;
    if(a > d); else a = d;
    return a;
}

int main(){ 
    
    int i, j, t, lung, x, y, l, val;
    
    ifstream in("plantatie.in");
    ofstream out("plantatie.out");
    
    in >> N >> M;
    for(i = 1; i <= N; i++)
        for(j = 1; j <= N; j++)
        {
            in >> C[i][j][0];
        }
        
    lung = int(log2(N));
    
    for(t = 1; t <= lung; t++)
    {
        val = 1<<(t-1);
        for(i = 1; i <= N; i++)
            for(j = 1; j <= N; j++)
                if(i + (1<<t) -1 <= N && j + (1<<t) -1 <= N)
                    C[i][j][t] = max(C[i][j][t-1], C[i+val][j][t-1], C[i][j+val][t-1], C[i+val][j+val][t-1]);
    }
        
    
    int rez, put;
    for(i = 1; i <= M; i++)
    {
        in >> x >> y >> l;
        put = int(log2(l)); 
        val = 1 << put;
        
        rez = max(C[x][y][put], C[x - val + l][y][put], C[x][y - val + l][put], C[x - val + l][y - val + l][put]); 
        
        out << rez << "\n";
    }
    return 0;
}