Pagini recente » Cod sursa (job #2104697) | Cod sursa (job #413643) | Cod sursa (job #1209701) | Cod sursa (job #1029532) | Cod sursa (job #1149410)
#include <cstdio>
#include <algorithm>
#define Nmax 505
using namespace std;
int N,a[Nmax][Nmax],dp[Nmax][Nmax][10],t[Nmax];
inline void PreCalcul()
{
int i;
for(i=2;i<=Nmax;++i)
{
t[i]=t[i-1];
if((1<<(t[i]+1))<=i)
++t[i];
}
}
int main()
{
int M,i,j,val,k,v,q,p,sol,x1,x2,y1,y2;
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", &a[i][j]);
PreCalcul();
val=t[N];
for(i=1;i<=N;++i)
for(j=1;j<=N;++j)
dp[i][j][0]=a[i][j];
for(i=1;i<=N;++i)
for(j=1;j<=N;++j)
for(k=1;k<=val && (1<<k)<=i && (1<<k)<=j;++k)
{
v=(1<<(k-1));
dp[i][j][k]=max(dp[i][j][k-1],dp[i][j-v][k-1]);
dp[i][j][k]=max(dp[i][j][k],max(dp[i-v][j][k-1],dp[i-v][j-v][k-1]));
}
while(M--)
{
scanf("%d%d%d", &x1,&y1,&k);
x2=x1+k-1; y2=y1+k-1;
q=t[k]; p=(1<<q);
sol=max(dp[x2][y2][q],max(dp[x1+p-1][y1+p-1][q],max(dp[x1+p-1][y2][q],dp[x2][y1+p-1][q])));
printf("%d\n", sol);
}
return 0;
}