Cod sursa(job #1025070)

Utilizator cat_red20Vasile Ioana cat_red20 Data 9 noiembrie 2013 14:40:57
Problema Plantatie Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.18 kb
#include<fstream>
using namespace std;
const int p2[10]={1,2,4,8,16,32,64,128,256,512};
int a[501][501][10],n,m;
ifstream fin("plantatie.in");
ofstream fout("plantatie.out");

void citire()
{
    fin>>n>>m;
    for(int i=1;i<=n;i++)
    {
        for(int j=1;j<=n;j++)
        {
            fin>>a[i][j][0];
        }
    }
}

void rmq()
{
    for(int k=1;p2[k]<=n;k++)
    {
        for(int i=p2[k];i<=n;i++)
        {
            for(int j=p2[k];j<=n;j++)
            {
                a[i][j][k]=max(max(a[i][j][k-1],
                                   a[i-p2[k-1]][j-p2[k-1]][k-1]),
                                max(a[i-p2[k-1]][j][k-1],
                                a[i][j-p2[k-1]][k-1]));
            }
        }
    }
}

void queries()
{
    int x,y,k,t,xf,yf;
    for(int i=1;i<=m;i++)
    {
        fin>>x>>y>>k;
        xf=x+k-1;
        yf=y+k-1;
        t=0;
        while(p2[t]<=k)
        {
            t++;
        }
        t--;
        fout<<max(max(a[xf][yf][t],a[xf][y+p2[t]-1][t]),max(a[x+p2[t]-1][yf][t],a[x+p2[t]-1][y+p2[t]-1][t]))<<"\n";
    }
}

int main()
{
    citire();
    rmq();
    queries();
    return 0;
}