Cod sursa(job #1021729)

Utilizator cat_red20Vasile Ioana cat_red20 Data 4 noiembrie 2013 09:45:34
Problema Plantatie Scor 10
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.91 kb
#include<fstream>
using namespace std;
const int p2[10]={1,2,4,8,16,32,64,128,256,512};
int a[501][501][10],n,m;
ifstream fin("plantatie.in");
ofstream fout("plantatie.out");

void citire()
{
	fin>>n>>m;
	for(int i=1;i<=n;i++)
	{
		for(int j=1;j<=n;j++)
		{
			fin>>a[i][j][0];
		}
	}
}

void rmq()
{
	for(int k=1;p2[k]<=n;k++)
	{
		for(int i=p2[k];i<=n;i++)
		{
			for(int j=p2[k];j<=n;j++)
			{
				a[i][j][k]=max(max(a[i][j][k-1],
						           a[i-p2[k-1]][j-p2[k-1]][k-1]),
								max(a[i-p2[k-1]][j][k-1],
								a[i][j-p2[k]][k-1]));
			}
		}
	}
}

void queries()
{
	int x,y,k,t,xf,yf;
	for(int i=1;i<=m;i++)
	{
		fin>>x>>y>>k;
		xf=x+k-1;
		yf=y+k-1;
		t=0;
		while(p2[t]<=k)
		{
			t++;
		}
		t--;
		fout<<max(max(a[xf][yf][t],a[xf][y+p2[t]][t]),max(a[x+p2[t]][yf][t],a[x+p2[t]][y+p2[t]][t]))<<"\n";
	}
}

int main()
{
	citire();
	rmq();
	queries();
	return 0;
}