Pagini recente » Cod sursa (job #721868) | Cod sursa (job #1489106) | Cod sursa (job #1749414) | Cod sursa (job #2989580) | Cod sursa (job #36056)
Cod sursa(job #36056)
#include <cstdio>
#define INF "plantatie.in"
#define OUF "plantatie.out"
#define NMAX 512
int rmq[NMAX][NMAX][10]={0},n,m;
void preproc()
{
register int i,j,k,ii,jj,max;
for(k=1;(1<<k)<=n;k++)
{
// printf("%d ",k);
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
{
ii=i-(1<<(k-1));
jj=j-(1<<(k-1));
if(ii<=0) ii=1;
if(jj<=0) jj=1;
max=rmq[i][j][k-1];
if(max<rmq[i][jj][k-1]) max=rmq[i][jj][k-1];
if(max<rmq[ii][j][k-1]) max=rmq[ii][j][k-1];
if(max<rmq[ii][jj][k-1]) max=rmq[ii][jj][k-1];
rmq[i][j][k]=max;
}
}
// printf("\n");
}
int main()
{
FILE *in,*out;
in=fopen(INF,"r");
out=fopen(OUF,"w");
int i,j,x,y,z,lg,ii,jj,max;
fscanf(in,"%d %d",&n,&m);
for(i=1;i<=n;i++)
for(j=1;j<=n;j++) fscanf(in,"%d",&rmq[i][j][0]);
preproc();
/*for(i=1;i<=n;i++)
{
for(j=1;j<=n;j++) printf("%d ",rmq[i][j][1]);
printf("\n");
}*/
for(i=1;i<=m;i++)
{
fscanf(in,"%d %d %d",&x,&y,&z);
x+=z-1;y+=z-1;
lg=0;
while((1<<(lg+1))<=z) lg++;
j=1<<lg;
// printf("%d %d %d\n",x,y,lg);
ii=x-z+j;
jj=y-z+j;
max=rmq[x][y][lg];
if(ii>x-z&&rmq[ii][y][lg]>max) max=rmq[ii][y][lg];
if(jj>y-z&&rmq[x][jj][lg]>max) max=rmq[x][jj][lg];
if(ii>x-z&&jj>y-z&&rmq[ii][jj][lg]>max) max=rmq[ii][jj][lg];
fprintf(out,"%d\n",max);
}
fclose(in);fclose(out);
return 0;
}