Pagini recente » Cod sursa (job #226473) | Cod sursa (job #2717919) | Cod sursa (job #1026765) | Cod sursa (job #1637870) | Cod sursa (job #2293015)
#include <fstream>
#define N 500
using namespace std;
int dp[N+5][N+5][20],logaritm[N+5];
int main()
{
ifstream f("plantatie.in");
ofstream g("plantatie.out");
int n,Q;
f>>n>>Q;
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
{
int x;
f>>x;
dp[i][j][0]=x;
}
for(int i=2;i<=n;i++)
logaritm[i]=logaritm[i/2]+1;
for(int k=1;(1<<k)<=n;k++)
for(int i=1;i<=n+1-(1<<k);i++)
for(int j=1;j<=n+1-(1<<k);j++)
{
int p=(1<<(k-1));
dp[i][j][k]=max(dp[i][j][k-1],dp[i][j+p][k-1]);
dp[i][j][k]=max(dp[i][j][k],dp[i+p][j][k-1]);
dp[i][j][k]=max(dp[i][j][k],dp[i+p][j+p][k-1]);
}
for(int q=1;q<=Q;q++)
{
int i,j,k;
f>>i>>j>>k;
int log=logaritm[k];
int sol=0;
int dif=k-(1<<log);
sol=max(dp[i][j][log],dp[i+dif][j][log]);
sol=max(sol,dp[i+dif][j+dif][log]);
sol=max(sol,dp[i][j+dif][log]);
g<<sol<<"\n";
}
return 0;
}