Pagini recente » Cod sursa (job #571874) | Cod sursa (job #2003487) | Diferente pentru home intre reviziile 540 si 902 | Monitorul de evaluare | Cod sursa (job #20056)
Cod sursa(job #20056)
using namespace std;
#include<fstream>
#include<stdio.h>
#define nmax 505
int a[nmax][nmax][21];
int main()
{
FILE *fin=fopen("plantatie.in","r"),
*fout=fopen("plantatie.out","w");
int n,m;
int i,j,k;
fscanf(fin,"%d%d",&n,&m);
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
fscanf(fin,"%d",&a[i][j][0]);
int lim=23;
int x,y,z,cst;
while(((1<<lim)&n)==0) lim--;
for(k=1;k<=lim;k++)
{
cst=1<<(k-1);
for(i=1;i<=n-(1<<k)+1;i++)
for(j=1;j<=n-(1<<k)+1;j++)
{
if(a[i][j][k-1]>a[i+cst][j][k-1])
x=a[i][j][k-1];
else
x=a[i+cst][j][k-1];
if(a[i][j+cst][k-1]>a[i+cst][j+cst][k-1])
y=a[i][j+cst][k-1];
else
y=a[i+cst][j+cst][k-1];
if(x>y)
a[i][j][k]=x;
else
a[i][j][k]=y;
}
}
int xx;
for(xx=1;xx<=m;xx++)
{
fscanf(fin,"%d%d%d",&i,&j,&k);
lim=23;
while((k&(1<<lim))==0) lim--;
cst=k-(1<<lim);
if(a[i][j][lim]>a[i+cst][j][lim])
x=a[i][j][lim];
else
x=a[i+cst][j][lim];
if(a[i][j+cst][lim]>a[i+cst][j+cst][lim])
y=a[i][j+cst][lim];
else
y=a[i+cst][j+cst][lim];
if(x>y)
z=x;
else
z=y;
fprintf(fout,"%d\n",z);
}
fclose(fin);
fclose(fout);
return 0;
}