Cod sursa(job #2503068)

Utilizator Mircea_DonciuDonciu Mircea Mircea_Donciu Data 2 decembrie 2019 12:17:22
Problema Plantatie Scor 50
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.11 kb
#include <fstream>

using namespace std;
long long n,m,i,j,k,p,put,pu[505],rmq[505][505][12];
int main()
{
    ifstream f("plantatie.in");
    ofstream g("plantatie.out");
    f>>n>>m;
    for(i=2; i<=n; i*=2) pu[i]++;
    for(i=1; i<=n; i++) pu[i]+=pu[i-1];
    for(i=1; i<=n; i++)
    for(j=1; j<=n; j++)
    f>>rmq[i][j][0];
    for(p=2; p<=n; p*=2)
    for(i=1; i<=n-p+1; i++)
    for(j=1; j<=n-p+1; j++)
    {
        long long a,b;
        a=max(rmq[i][j][pu[p]-1],rmq[i][j+p/2][pu[p]-1]);
        b=max(rmq[i+p/2][j][pu[p]-1],rmq[i+p/2][j+p/2][pu[p]-1]);
        rmq[i][j][pu[p]]=max(a,b);
    }
    /*for(p=1; p<=n; p*=2)
    {
        for(i=1; i<=n; i++)
        {
            for(j=1; j<=n; j++)
                g<<rmq[i][j][pu[p]]<<" ";
            g<<'\n';
        }
        g<<'\n';
    }*/
    while(m)
    {
        m--;
        f>>i>>j>>k;
        p=pu[k];
        put=p;
        p=1<<put;
        long long a,b;
        a=max(rmq[i][j][put],rmq[i+k-p][j][put]);
        b=max(rmq[i][j+k-p][put],rmq[i+k-p][j+k-p][put]);
        g<<max(a,b)<<'\n';
    }
    return 0;
}