Cod sursa(job #1450392)

Utilizator SilviuIIon Silviu SilviuI Data 13 iunie 2015 08:40:02
Problema Plantatie Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.82 kb
#include <stdio.h>
#define inf 0x3f3f3f3f
#define nmax 100010
using namespace std;
int n,m,i,d,j,k,x,y,z,dp[10][502][502],v[nmax],aux;
inline int max(int a,int b)
{
    if (a>b) return a; else return b;
}
int main(){
freopen("plantatie.in","r",stdin);
freopen("plantatie.out","w",stdout);
scanf("%d%d",&n,&m);
for (i=1;i<=n;i++)
    for (j=1;j<=n;j++)
    scanf("%d",&dp[0][i][j]);
for (k=1;1<<k<=n;k++){
    aux=1<<(k-1);
    for (i=1;i+aux<=n;i++)
    for (j=1;j+aux<=n;j++)
    dp[k][i][j]=max(dp[k-1][i][j],max(dp[k-1][i+aux][j],max(dp[k-1][i][j+aux],dp[k-1][i+aux][j+aux])));
}
for (i=2;i<=n;i++) v[i]=v[i/2]+1;
for (i=1;i<=m;i++){
    scanf("%d%d%d",&x,&y,&z);
    d=v[z]; aux=1<<d;
    printf("%d\n",max(dp[d][x][y],max(dp[d][x+z-aux][y+z-aux],max(dp[d][x+z-aux][y],dp[d][x][y+z-aux]))));
}
return 0;
}