Cod sursa(job #1756535)

Utilizator alex.craciunCraciun Alexandru alex.craciun Data 13 septembrie 2016 00:00:40
Problema Plantatie Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.14 kb
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <math.h>
using namespace std;
int n,m, dp[550][550][10];
FILE *f=fopen("plantatie.in","r");
void citire()
{
    fscanf(f,"%d%d",&n,&m);
    for(int i=1;i<=n;i++)
        for(int j=1;j<=n;j++)
          fscanf(f,"%d",&dp[i][j][0]);
}
void rmq( )
{
    for(int k=1;k<=log2(n);k++)
        for(int i=1;i+(1<<k)<=n+1;i++)
          for(int j=1;j+(1<<k)<=n+1;j++)
    {
        dp[i][j][k]=dp[i][j][k-1];
        dp[i][j][k]=max(dp[i][j][k], dp[i][j+(1<<k-1)][k-1]);
        dp[i][j][k]=max(dp[i][j][k], dp[i+(1<<k-1)][j][k-1]);
        dp[i][j][k]=max(dp[i][j][k], dp[i+(1<<k-1)][j+(1<<k-1)][k-1]);

    }
}
FILE *f1=fopen("plantatie.out","w");
void query()
{
    for(int l=1;l<=m;l++)
    {
         int i,j,k;
         fscanf(f,"%d%d%d",&i,&j,&k);
         int p=log2(k);
         int x=(1<<p);
         int nr=dp[i][j][p];
         nr=max(nr,dp[i+k-x][j][p]);
         nr=max(nr,dp[i+k-x][j+k-x][p]);
         nr=max(nr,dp[i][j+k-x][p]);
         fprintf(f1,"%d\n",nr);

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