Cod sursa(job #1294296)

Utilizator alexandra_udristoiuUdristoiu Alexandra Maria alexandra_udristoiu Data 17 decembrie 2014 11:07:48
Problema Plantatie Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.3 kb
#include<fstream>
using namespace std;
int n, i, j, k, ii, maxim, m;
int a[501][501][10], p[501];
ifstream fin("plantatie.in");
ofstream fout("plantatie.out");
int main(){
	fin>> n >> m;
	for(i = 1; i <= n; i++){
		for(j = 1; j <= n; j++){
			fin>> a[i][j][0];
		}
	}
	for(i = 2; i <= n; i++){
		p[i] = p[i/2] + 1;
	}
	for(k= 1; (1 << k) <= n; k++){
		for(i = 1; i <= n; i++){
			for(j = 1; j <= n; j++){
				a[i][j][k] = a[i][j][k-1];
				if(i + (1<<(k-1)) <= n && a[i][j][k] < a[i + (1<<(k-1))][j][k-1]){
					a[i][j][k] = a[i + (1<<(k-1))][j][k-1];
				}
				if(j + (1<<(k-1)) <= n && a[i][j][k] < a[i][j + (1<<(k-1))][k-1]){
					a[i][j][k] = a[i][j + (1<<(k-1))][k-1];
				}
				if(i + (1<<(k-1)) <= n && j + (1<<(k-1)) <= n && a[i][j][k] < a[i + (1<<(k-1))][j + (1<<(k-1))][k-1]){
					a[i][j][k] = a[i + (1<<(k-1))][j + (1<<(k-1))][k-1];
				}
			}
		}
	}
	for(ii = 1; ii <= m; ii++){
		fin>> i >> j >> k;
		maxim  = a[i][j][p[k]];
		if(maxim < a[i+k-1-(1<<p[k])+1][j][p[k]]){
			maxim = a[i+k-1-(1<<p[k])+1][j][p[k]];
		}
		if(maxim < a[i+k-1-(1<<p[k])+1][j+k-1-(1<<p[k])+1][p[k]]){
			maxim = a[i+k-1-(1<<p[k])+1][j+k-1-(1<<p[k])+1][p[k]];
		}
		if(maxim < a[i][j+k-1-(1<<p[k])+1][p[k]]){
			maxim = a[i][j+k-1-(1<<p[k])+1][p[k]];
		}
		fout<< maxim <<"\n";
	}
	return 0;
}