Cod sursa(job #1700572)

Utilizator Cezar_MihalceaCezar Mihalcea Cezar_Mihalcea Data 10 mai 2016 20:09:21
Problema Plantatie Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.15 kb
#include<fstream>
using namespace std;

ifstream f("plantatie.in");
ofstream g("plantatie.out");

int r[501][501][9], v[501][501], n, m, log[501];

int maxim(int a,int b)
{
    if(a>b)
        return a;
    return b;
}

void pre_log()
{
    int i;
    log[1]=0;
    for(i=2;i<=n;i++)
    {
        log[i]=1+log[i/2];
    }
}

void pre_mat()
{
    int i,j,k,m1,m2;
    for(i=1;i<=n;i++)
    {
        for(j=1;j<=n;j++)
        {
            r[i][j][0]=v[i][j];
            for(k=1;(1<<k)<=i;k++)
            {
                m1=maxim(r[i][j][k-1], r[i][j-(1<<k-1)][k-1]);
                m2=maxim(r[i-(1<<k-1)][j][k-1], r[i-(1<<k-1)][j-(1<<k-1)][k-1]);
                r[i][j][k]=maxim(m1,m2);
            }
        }
    }
}

int sol(int a,int b,int c)
{
    int l=log[c],m1,m2;
    m1=maxim(r[a+(1<<l)-1][b+(1<<l)-1][l], r[a+(1<<l)-1][b+c-1][l]);
    m2=maxim(r[a+c-1][b+(1<<l)-1][l], r[a+c-1][b+c-1][l]);
    return maxim(m1,m2);
}

int main()
{
    int i,x,y,t,j;
    f>>n>>m;
    for(i=1;i<=n;i++)
        for(j=1;j<=n;j++)
            f>>v[i][j];
    pre_log();
    pre_mat();
    for(i=1;i<=m;i++)
    {
        f>>x>>y>>t;
        g<<sol(x,y,t)<<"\n";
    }
    return 0;
}