Cod sursa(job #1077999)

Utilizator CatalinaRaduCatalina Elena Radu CatalinaRadu Data 11 ianuarie 2014 21:38:02
Problema Plantatie Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.13 kb
#include <iostream>
#include <fstream>

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

int m,n;
int a[501][501];
int rmq[19][501][501];
int v[501];

int maxim (int x, int y, int z, int t)
{
   int mxm=x;
   if(mxm<y)
    mxm=y;
   if(mxm<z)
    mxm=z;
   if(mxm<t)
    mxm=t;
   return mxm;
}

int main()
{
    f>>m>>n;
    int i,j,k,l,linie,col,lat;

    for(i=0;i<n;i++)
        for(j=0;j<n;j++)
    {
        f>>a[i][j];
        rmq[0][i][j]=a[i][j];
    }
    for (i=2;i<=n;i++)
        v[i]=v[i/2]+1;

    for (i=1;(1<<i)<=n;i++)
        for (j=0;j<n-(1<<i)+1;j++)
           for (k=0;k<n-(1<<i)+1;k++)
    {
        l=1<<(i-1);
        rmq[i][j][k]=maxim(rmq[i-1][j][k],rmq[i-1][j+l][k],rmq[i-1][j+l][k+l],rmq[i-i][j][k+l]);
    }

    for (i=1;i<=m;i++)
    {
        f>>linie>>col>>lat;
        linie--;
        col--;
        long long x=(1<<v[lat]);
        g<<maxim(rmq[v[lat]][linie][col], rmq[v[lat]][linie+lat-x][col], rmq[v[lat]][linie+lat-x][col+linie-x], rmq[v[lat]][linie][col+lat-x])<<'\n';
    }
    f.close();g.close();
    return 0;
    }