Cod sursa(job #1140271)

Utilizator apopeid14Apopei Daniel apopeid14 Data 11 martie 2014 21:10:09
Problema Plantatie Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1 kb
#include <cstdio>
#include <stdarg.h>
using namespace std;

int v[12][525][525];
int n,m;

int maxof(int n_args, ...) {
    va_list ap;
    va_start(ap, n_args);
    int max = va_arg(ap, int);
    for(int i = 2; i <= n_args; i++) {
        int a = va_arg(ap, int);
        if(a > max) max = a;
    }
    va_end(ap);
    return max;
}

int main() {
	freopen("plantatie.in","r",stdin);
	freopen("plantatie.out","w",stdout);
	scanf("%d %d",&n,&m);
	for (int i=0;i<n;i++) for (int j=0;j<n;j++) scanf("%d",&v[0][i][j]);
	for (int k=1;(1<<k)<=n;k++) {
		for (int i=0;i<=n-(1<<(k-1));i++) for (int j=0;j<=n-(1<<(k-1));j++) {
			v[k][i][j] = maxof(4,v[k-1][i][j],v[k-1][i][j+(1<<(k-1))],v[k-1][i+(1<<(k-1))][j],v[k-1][i+(1<<(k-1))][j+(1<<(k-1))]);
		}
	}
	while (m--) {
		int i,j,k,nr=0,q=0;
		scanf("%d %d %d",&i,&j,&k);i--,j--;
		while ((1<<q) <= k) q++;
		q--;
		int r = maxof(4,v[q][i][j],v[q][i+k-(1<<q)][j],v[q][i][j+k-(1<<q)],v[q][i+k-(1<<q)][j+k-(1<<q)]);
		printf("%d\n",r);
	}
	return 0;
}