Cod sursa(job #170168)

Utilizator mike4problemsRadu Gabriel mike4problems Data 2 aprilie 2008 14:20:30
Problema Plantatie Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.77 kb
#include<fstream>
using namespace std;

ifstream fin("plantatie.in");
ofstream fout("plantatie.out");

#define Max 501
#define LgMax 10

int n,m;
int rmq[LgMax][Max][Max];
int lg[Max];

int main()
{
	int i,j,k,t,l;
	fin>>n>>m;
	for(i=1;i<=n;i++)
		for(j=1;j<=n;j++)
			fin>>rmq[0][i][j];
	for(i=2;i<=n;i++)
		lg[i]=lg[i/2]+1;
	for(k=1;k<=lg[n];k++)
	{
		t=1<<k;
		for(i=1;i+t-1<=n;i++)
			for(j=1;j+t-1<=n;j++)
		{
			rmq[k][i][j]=max(rmq[k-1][i][j],rmq[k-1][i+t/2][j]);
			rmq[k][i][j]=max(rmq[k][i][j],rmq[k-1][i][j+t/2]);
			rmq[k][i][j]=max(rmq[k][i][j],rmq[k-1][i+t/2][j+t/2]);
		}
	}
	while(m--)
	{
		fin>>i>>j>>l;
		k=lg[l];
		t=max(rmq[k][i][j],rmq[k][i+l-(1<<k)][j]);
		t=max(t,rmq[k][i][j+l-(1<<k)]);
		t=max(t,rmq[k][i+l-(1<<k)][j+l-(1<<k)]);
		fout<<t<<'\n';
	}
	return 0;
}