Cod sursa(job #58702)

Utilizator Binary_FireFlorin Pg Binary_Fire Data 6 mai 2007 22:11:46
Problema Plantatie Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.9 kb
#include <stdio.h>
#define fin  "plantatie.in"
#define fout "plantatie.out"
#define Nmax 501

int N,M,v[Nmax][Nmax][10];

int minf(int a,int b) { (a<b)?(a):(a=b); return a; }
int maxf(int a,int b) { (a>b)?(a):(a=b); return a; }

int main() {
int i,j,k,val,p;

	freopen(fin,"r",stdin); freopen(fout,"w",stdout);

	scanf("%d%d",&N,&M);

	for (i=1;i<=N;++i)
	for (j=1;j<=N;++j) {
		scanf("%d",&val);
		v[i][j][0]=val;
		for (k=1;(1<<k)<=minf(i,j);++k) {
			val=maxf(v[i][j][k-1],val);
			val=maxf(v[i][j-(1<<(k-1))][k-1],val);
			val=maxf(v[i-(1<<(k-1))][j][k-1],val);
			val=maxf(v[i-(1<<(k-1))][j-(1<<(k-1))][k-1],val);
			v[i][j][k]=val;
		}
	}
 
	for (;M>0;--M) {
		scanf("%d%d%d",&i,&j,&k);
		i+=k-1; j+=k-1;
		for (p=0;(1<<p)<=k;++p);
		--p;
		val=v[i][j][p];
		val=maxf(val,v[i][j-k+(1<<p)][p]);
		val=maxf(val,v[i-k+(1<<p)][j][p]);
		val=maxf(val,v[i-k+(1<<p)][j-k+(1<<p)][p]);
		printf("%d\n",val);		
	}

	return 0;
}