Cod sursa(job #1025062)

Utilizator cat_red20Vasile Ioana cat_red20 Data 9 noiembrie 2013 14:34:18
Problema Plantatie Scor 10
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.14 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=1;i<=n-p2[k]+1;i++)
        {
            for(int j=1;j<=n-p2[k]+1;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]][k-1]));
            }
        }
    }
}

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

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