Cod sursa(job #201260)

Utilizator hadesgamesTache Alexandru hadesgames Data 30 iulie 2008 00:20:18
Problema Plantatie Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.14 kb
#include <cstdio>
#include <functional>
#include <algorithm>
using namespace std;
#define FOR(i,a,b) for (i=a;i<=b;i++)
int log[600],put[50],a[501][501][10];
int main()
{
	FILE *in,*out;
	int n,m,x,y,z,i,j,k;
	in=fopen("plantatie.in","r");
	out=fopen("plantatie.out","w");
	fscanf(in,"%d%d",&n,&m);
	FOR(i,1,n)
		FOR(j,1,n)
		{
			fscanf(in,"%d",&a[i][j][0]);
			//printf("%d %d %d\n",a[i][j][0],i,j);

		}
	log[1]=0;
	j=2;
	k=1;
	FOR(i,2,n)
	{
		if (i==j)
		{
			j*=2;
			k++;
		}
		log[i]=k-1;
	}
	put[0]=1;
	FOR(i,1,log[n])
		put[i]=put[i-1]*2;
	FOR(k,1,log[n])
	{
		FOR(i,1,n-put[k]+1)
			FOR(j,1,n-put[k]+1)
				a[i][j][k]=max(a[i][j][k-1],max(a[i+put[k-1]][j][k-1],max(a[i][j+put[k-1]][k-1],a[i+put[k-1]][j+put[k-1]][k-1])));
			
	}
	FOR(i,1,m)
	{
		fscanf(in,"%d%d%d",&x,&y,&z);
		//printf("%d %d %d\n",x,y,z);
                //out<<a[x][y][log[z]]<<a[x+z-putlog[z]]][y][log[z]]<<a[x][y+z-put[log[z]]][log[z]]<<a[x+z-put[log[z]]][y+z-put[log[z]]][log[z]]<<'\n';
		fprintf(out,"%d\n",max(a[x][y][log[z]],max(a[x+z-put[log[z]]][y][log[z]],max(a[x][y+z-put[log[z]]][log[z]],a[x+z-put[log[z]]][y+z-put[log[z]]][log[z]]))));
	}
	fclose(in);
	fclose(out);
	return 0;
}