Cod sursa(job #3133416)

Utilizator z.catincaCatinca Zavoianu z.catinca Data 25 mai 2023 15:21:01
Problema Plantatie Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.38 kb
#include <fstream>
#include <algorithm>
using namespace std;
#define MAX 512

int plan[MAX][MAX][10];
int n, m;
int level[MAX];

int main()
{
    ifstream f ("plantatie.in");
    ofstream g("plantatie.out");
    int i, j, k;

    f>>n>>m;
    for (i = 1; i <= n; ++i)
        for (j = 1; j <= n; ++j)
            f>>plan[i][j][0];

    for (k = 1; (1 << (k-1)) < n; ++k)
        for (i = n - (1 << (k-1)); i; --i)
            for (j = n - (1 << (k-1)); j; --j)
            {
                plan[i][j][k] = max(plan[i][j][k], plan[i][j][k-1]);
                plan[i][j][k] = max(plan[i][j][k], plan[i+(1 << (k-1))][j][k-1]);
                plan[i][j][k] = max(plan[i][j][k], plan[i][j+(1<<(k-1))][k-1]);
                plan[i][j][k] = max(plan[i][j][k], plan[i+(1 << (k-1))][j+(1<<(k-1))][k-1]);
            }
    int next = 2;
    int levl=0, rezolv;
    for (i = 2; i <= n; ++i)
    {
        level[i] = levl;
        if (i == next)
        {next <<= 1;
            ++levl;}
    }
    for (; m; --m)
    {
        f>>i>>j>>k;
        if (k == 1)
            g<<plan[i][j][0];
        else
        {rezolv = plan[i][j][level[k]];
            rezolv= max(rezolv, plan[i][j+k-(1<<level[k])][level[k]]);
            rezolv= max(rezolv, plan[i+k-(1<<level[k])][j][level[k]]);
            rezolv= max(rezolv, plan[i+k-(1<<level[k])][j+k-(1<<level[k])][level[k]]);
            g<<rezolv;}
    }

    return 0;
}