Cod sursa(job #3037480)

Utilizator BuruianaRaresAndreiBuruiana Rares Andrei BuruianaRaresAndrei Data 25 martie 2023 16:51:00
Problema Plantatie Scor 10
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.61 kb
#include <fstream>
#include <cmath>
#define NMAX 502

using namespace std;

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

int n, q, x;
int val, crt;
int lin, col, dim, ans;
int plant[10][NMAX][NMAX];

int main()
{
 int i, j, k;
 cin >> n >> q;
 for(i = 1; i <= n; i++)
     for(j = 1; j <= n; j++)
         cin >> plant[0][i][j];
 val = (int) log2(n);
 for(k = 1; k <= val; k++)
    {
     crt = 1 << k;
     for(i = 1; i <= n - crt + 1; i++)
         for(j = 1; j <= n - crt + 1; j++)
             plant[k][i][j] = plant[k - 1][i][j],
             plant[k][i][j] = max(plant[k][i][j], plant[k - 1][i][j + crt / 2]),
             plant[k][i][j] = max(plant[k][i][j], plant[k - 1][i + crt / 2][j]),
             plant[k][i][j] = max(plant[k][i][j], plant[k - 1][i + crt / 2][j + crt / 2]);
             //plant[k][i][j] = max(plant[k - 1][i][j], plant[k - 1][i][j + crt / 2 - 1], plant[k - 1][i + crt / 2 - 1][j], plant[k - 1][i + crt / 2 - 1][j + crt / 2 - 1]);
    }

 /*for(k = 0; k <= val; k++)
    {
     crt = 1 << k;
     for(i = 1; i <= n - crt + 1; i++)
        {
         for(j = 1; j <= n - crt + 1; j++)
             cout << plant[k][i][j] << ' ';
         cout << '\n';
        }
     cout << '\n';
    }*/

 while(q--)
      {
       cin >> lin >> col >> dim;
       val = (int) log2(dim);
       crt = 1 << val;
       x = plant[k - 1][lin][col],
       x = max(x, plant[val][lin][col + crt / 2]),
       x = max(x, plant[val][lin + crt / 2][col]),
       x = max(x, plant[val][lin + crt / 2][col + crt / 2]);
       cout << x << '\n';
      }
 return 0;
}