Cod sursa(job #3231648)

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

using namespace std;

#define NMAX 505
#define MMAX 75005

int C[NMAX][NMAX][15], n, m;


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)
                {
                    int max1 = max(C[i][j][t-1], C[i+val][j][t-1]);
                    int max2 = max(C[i][j+val][t-1], C[i+val][j+val][t-1]);
                    C[i][j][t] = max(max1, max2);
                }
    }
        
    
    int rez, put;
    for(i = 1; i <= m; i++)
    {
        in >> x >> y >> l;
        put = int(log2(l)); 
        val = 1 << put;
        
        int max1 = max(C[x][y][put], C[x - val + l][y][put]);
        int max2 = max(C[x][y - val + l][put], C[x - val + l][y - val + l][put]);
        rez = max(max1, max2); 
        
        out << rez << "\n";
    }
    return 0;
}