Pagini recente » Cod sursa (job #2162933) | Cod sursa (job #1420) | Cod sursa (job #2440245) | Cod sursa (job #2673739) | Cod sursa (job #1756535)
#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;
}