Cod sursa(job #110651)

Utilizator judy_kCristina Petrovici judy_k Data 27 noiembrie 2007 10:12:29
Problema Plantatie Scor 50
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.06 kb
#include <stdio.h>


int i,j,k,n,m,l,a[700][700][10],p,max;

int maxim(int a, int b)
{
 	if (a>b) return a;
    else return b;
}

int main()
{
	freopen("plantatie.in","r",stdin);
    freopen("plantatie.out","w",stdout);
    scanf("%d %d",&n,&m);
    for (i=1;i<=n;++i)
    	for (j=1;j<=n;++j)
        	scanf("%d ",&a[i][j][0]);
    p=0;
    while ((1<<p) <= n) p++;
    for (k=1;k<=p;++k)
    	for (i=1;i<=n;++i)
        	for (j=1;j<=n;++j)
            {
             	a[i][j][k]=maxim(a[i][j][k-1],a[i][j+(1<<(k-1))][k-1]);
                a[i][j][k]=maxim(a[i][j][k],a[i+(1<<(k-1))][j+(1<<(k-1))][k-1]);
                a[i][j][k]=maxim(a[i][j][k],a[i+(1<<(k-1))][j][k-1]);
            }

    for (;m>0;--m)
    {
		scanf("%d %d %d",&i,&j,&k);
        p=0;
        while ((1<<p) <= k) p++;
        --p;
   //     printf("%d\n",p);
        max=maxim(a[i][j][p],a[i][j+k-(1<<p)][p]);
        max=maxim(max,a[i+k-(1<<p)][j][p]);
        max=maxim(max,a[i+k-(1<<p)][j+k-(1<<p)][p]);
        printf("%d\n",max);
    }
    
    return 0;
}