Pagini recente » Cod sursa (job #1001943) | Cod sursa (job #1610324) | Cod sursa (job #2964918) | Cod sursa (job #1625198) | Cod sursa (job #56552)
Cod sursa(job #56552)
using namespace std;
#define nmax 515
#include<stdio.h>
FILE *fin=fopen("plantatie.in","r"),
*fout=fopen("plantatie.out","w");
int i,j,n,m,p,k,ii,pw;
int opt[nmax][nmax][12];
int maxim(int a, int b, int c, int d)
{
int max=-10000;
if (a>max) max=a;
if (b>max) max=b;
if (c>max) max=c;
if (d>max) max=d;
return max;
}
void gosolve()
{
int pw;
pw=1;
for (k=1; k<=p; k++)
{
for (i=1; i<=n; i++)
for (j=1; j<=n; j++)
if (i+pw<=n && j+pw<=n)
opt[i][j][k]=maxim(opt[i][j][k-1],opt[i][j+pw][k-1],opt[i+pw][j][k-1],opt[i+pw][j+pw][k-1]);
pw*=2;
}
}
int main()
{
fscanf(fin,"%d%d",&n,&m);
p=1;
while ((1<<p)<=n) p++;
p--;
for (i=1; i<=n; i++)
for (j=1; j<=n; j++)
fscanf(fin,"%d",&opt[i][j][0]);
gosolve();
fscanf(fin,"\n");
for (ii=1; ii<=m ; ii++)
{
fscanf(fin,"%d%d%d",&i,&j,&k);
pw=1; p=1;
while ((1<<p)<=k)
{ p++; pw*=2; }
p--;
fprintf(fout,"%d\n",maxim(opt[i][j][p],opt[i][j+k-pw][p],opt[i+k-pw][j][p],opt[i+k-pw][j+k-pw][p]));
}
fclose(fin);
fclose(fout);
return 0;
}