Cod sursa(job #2166773)

Utilizator tiberiu.bucur17Tiberiu Constantin Emanoil Bucur tiberiu.bucur17 Data 13 martie 2018 18:50:03
Problema Plantatie Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.02 kb
#include <cstdio>
#include <algorithm>
using namespace std;
const int maxn=500;
int a[maxn][maxn][9],lg[maxn+1];
int main()
{
    FILE *fin,*fout;
    fin=fopen("plantatie.in","r");
    fout=fopen("plantatie.out","w");
    int n,l,m,x,y,z,ans;
    fscanf(fin,"%d%d",&n,&m);
    for(int i=0;i<n;i++)
        for(int j=0;j<n;j++)
            fscanf(fin,"%d",&a[i][j][0]);
    for(int i=n-1;i>=0;i--)
        for(int j=n-1;j>=0;j--)
        {
            x=max(i,j);
            for(int k=1;(1<<k)+x-1<n;k++)
            {
                y=1<<(k-1);
                a[i][j][k]=max(max(a[i][j][k-1],a[i][j+y][k-1]),max(a[i+y][j][k-1],a[i+y][j+y][k-1]));
            }
        }
    for(int i=2;i<=n;i++)
        lg[i]=1+lg[i>>1];
    for(int i=0;i<m;i++)
    {
        fscanf(fin,"%d%d%d",&x,&y,&z);
        l=lg[z];n=1<<l;x--;y--;
        ans=max(max(a[x][y][l],a[x+z-n][y][l]),max(a[x][y+z-n][l],a[x+z-n][y+z-n][l]));
        fprintf(fout,"%d\n",ans);
    }
    fclose(fin);
    fclose(fout);
    return 0;
}