Cod sursa(job #3330570)

Utilizator Tudor28Ceclan Tudor Tudor28 Data 20 decembrie 2025 10:50:55
Problema Plantatie Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.3 kb
#include <fstream>
#include <iostream>
#include <math.h>
using namespace std;
ifstream fin("plantatie.in");
ofstream fout("plantatie.out");
#define NMAX 505
int mat[NMAX][NMAX];
int rmq[10][NMAX][NMAX];
int main()
{
    int n, m;
    fin >> n >> m;
    cout << n << " " << m << '\n';
    for (int i = 1; i <= n; i++)
    {
        for (int j = 1; j <= n; j++)
        {
            fin >> rmq[0][i][j];
        }
    }
    for (int k = 1; (1 << k) <= n; k++)
    {
        for (int i = 1; i + (1 << k) - 1 <= n; i++)
        {
            for (int j = 1; j + (1 << k) - 1 <= n; j++)
            {
                int l = (1 << (k - 1));
                int a = rmq[k - 1][i][j];
                int b = rmq[k - 1][i + l][j];
                int c = rmq[k - 1][i][j + l];
                int d = rmq[k - 1][i + l][j + l];
                rmq[k][i][j] = max(max(a, b), max(c, d));
            }
        }
    }
    while (m--)
    {
        int x, i, j;
        fin >> i >> j >> x;
        int k = log2(x);
        int l = (1 << k);
        cout << i << " " << j << " " << i + x - l << " " << j + x - l << '\n';

        int a = rmq[k][i][j];
        int b = rmq[k][i + x - l][j];
        int c = rmq[k][i][j + x - l];
        int d = rmq[k][i + x - l][j + x - l];
        fout << max(max(a, b), max(c, d)) << '\n';
    }

    return 0;
}