Cod sursa(job #1774056)

Utilizator Mircea_DonciuDonciu Mircea Mircea_Donciu Data 8 octombrie 2016 14:58:10
Problema Plantatie Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.01 kb
#include <fstream>

using namespace std;
long long n,m,i,p,a[505],j,rmq[10][505][505],L,l,x,y,k,q,w;
int main()
{
    ifstream f("plantatie.in");
    ofstream g("plantatie.out");
    p=2;
    for(i=1; p<500; i++)
    {
        a[p]=1;
        p*=2;
    }
    for(i=3; i<=500; i++)
        a[i]+=a[i-1];
    f>>n>>m;
    for(i=1; i<=n; i++)
    for(j=1; j<=n; j++)
    f>>rmq[0][i][j];
    for(i=1; 1<<i <=n; i++)
    {
        L=1<<i;
        l=L/2;
        for(k=1; k<=n-L+1; k++)
        for(j=1; j<=n-L+1; j++)
		{
		    rmq[i][k][j]=max(rmq[i-1][k][j],rmq[i-1][k][j+l]);
            rmq[i][k][j]=max(rmq[i][k][j],rmq[i-1][k+l][j]);
            rmq[i][k][j]=max(rmq[i][k][j],rmq[i-1][k+l][j+l]);
        }
        i=i;
    }
    for(i=1; i<=m; i++)
    {
        f>>x>>y>>k;
        j=a[k];
        l=1<<j;
        q=max(rmq[j][x][y],rmq[j][x][y+k-l]);
        w=max(rmq[j][x+k-l][y],rmq[j][x+k-l][y+k-l]);
        g<<max(q,w)<<'\n';
    }
    f.close(); g.close();
    return 0;
}