Cod sursa(job #2292621)

Utilizator ptudortudor P ptudor Data 29 noiembrie 2018 19:16:52
Problema Plantatie Scor 10
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.13 kb
#include <bits/stdc++.h>
using namespace std;
ifstream in("plantatie.in");
ofstream out("plantatie.out");
int n,m,a[505][505],put[505],d[50][505][505],W;
void make_put()
{
    int i;
    put[1]=0;
    for (i=2;i<=n;i++)put[i]=put[i/2]+1;
}
void make_d()
{int i,j,lat;
    for (i=1;i<=n;i++)for (j=1;j<=n;j++)d[0][i][j]=a[i][j];
    for (lat=1;lat<=W;lat++)
    {
        int L=1<<(lat-1);
        int M=1<<lat;
        for (i=1;i<=n-M+1;i++)
            for (j=1;j<=n-M+1;j++)
                d[lat][i][j]=max(max(d[lat-1][i][j],d[lat-1][i+L][j]),max(d[lat-1][i][j+L],d[lat-1][i+L][j+L]));
    }
}
int main()
{int i,j;
    in>>n>>m;
    for (i=1;i<=n;i++) for (j=1;j<=n;j++)in>>a[i][j];
    make_put();
    W=put[n];
    make_d();
    int lat,y,x;
    //for (i=1;i<=n;i++){for (j=1;j<=n;j++)cout<<a[i][j]<<" ";cout<<"\n";}
    for (i=1;i<=m;i++)
    {
        in>>y>>x>>lat;
        int Y=y+lat-1,X=x+lat-1;
        int P=put[lat]-1;
        int P2=(1<<P);
        out<<max(max(d[P][y][x],d[P][Y-P2+1][x]),max(d[P][y][X-P2+1],d[P][Y-P2+1][X-P2+1]))<<"\n";
    }
    out.close();
    in.close();
    return 0;
}