Cod sursa(job #335030)

Utilizator szabotamasSzabo Tamas szabotamas Data 28 iulie 2009 14:01:35
Problema Plantatie Scor 50
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.93 kb
#include <iostream>
#include <fstream>

#define NMAX 501
#define LMAX 10

using namespace std;

long t[NMAX][NMAX][LMAX], lg[NMAX], i, j, k, w, r, q, maxx, maxy, I, J, K, n, m;

void build(){
	for (i=1; i<=n; i++){
		for (k=1; (1<<k)<=n; k++){
			for (j=1; j<=n-(1<<k)+1; j++){
				t[i][j][k]=max(t[i][j][k-1],t[i][j+(1<<(k-1))][k-1]);
			}
		}
	}
}

long rezolve(long &I, long &J, long &K){
	maxx=-1;
	q=lg[K];
	for (i=I; i<=I+K-1; i++){
		maxy=max(t[i][J][q],t[i][J+K-(1<<q)][q]);
		maxx=max(maxx,maxy);
	}
	return maxx;
}

int main(){
	ifstream fin("plantatie.in");
	ofstream fout("plantatie.out");
		fin >> n >> m;
		for (i=1; i<=n; i++){
			for (j=1; j<=n; j++){
				fin >> t[i][j][0];
			}
		}
		lg[1]=0;
		for (i=2; i<=n; i++){
			lg[i]=lg[i/2]+1;
		}
		build();
		for (w=1; w<=m; w++){
			fin >> I >> J >> K;
			fout << rezolve(I,J,K) << "\n";
		}
	fin.close();
	fout.close();
	return 0;
}