Cod sursa(job #3170642)

Utilizator paaull69Ion Paul paaull69 Data 17 noiembrie 2023 21:39:09
Problema Plantatie Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.24 kb
#include <bits/stdc++.h>

using namespace std;
typedef long long int ll;
#define MOD 1000000007

ifstream fin("plantatie.in");
ofstream fout("plantatie.out");

int rmq[12][501][501];
int e[1001];

int main()
{
    int n,q;
    fin >> n >> q;
    for(int i=1;i<=n;i++)
    {
        for(int j=1;j<=n;j++)
        {
            fin >> rmq[0][i][j];
        }
    }
    for(int p=1;(1<<p)<=n;p++)
    {
        for(int i=1;i<=n;i++)
        {
            for(int j=1;j<=n;j++)
            {
                int a1=rmq[p-1][i][j];
                if(i+(1<<(p-1)) <=n)a1=max(a1,rmq[p-1][i+(1<<(p-1))][j]);
                if(j+(1<<(p-1)) <= n)a1=max(a1,rmq[p-1][i][j+(1<<(p-1))]);
                if(i+(1<<(p-1)) <=n && j+(1<<(p-1)) <= n)a1=max(a1,rmq[p-1][i+(1<<(p-1))][j+(1<<(p-1))]);
                rmq[p][i][j]=a1;
            }
        }
    }

    e[1]=0;
    for(int i=2;i<=n;i++)e[i]=e[i/2]+1;

    while(q--)
    {
        int x,y,w;
        fin >> x >> y >> w;
        int len = e[w];
        int x1=x+w-(1<<len);
        int y1=y+w-(1<<len);
        int r = max(rmq[len][x][y],rmq[len][x1][y1]);
        r = max(r,max(rmq[len][x][y1],rmq[len][x1][y]));

        fout << r << "\n";
    }
}

// 1 4 6  8 9