Cod sursa(job #2647848)

Utilizator BogdanTicuTicu Bogdan Valeriu BogdanTicu Data 6 septembrie 2020 18:25:48
Problema Plantatie Scor 50
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.88 kb
#include <bits/stdc++.h>

using namespace std;

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

int rmq[505][505][20];
int lgg[505];

int main()
{
	int n,m;
	in>>n>>m;
	for(int i=1;i<=n;i++)
		for(int j=1;j<=n;j++)
			in>>rmq[i][j][0];

	lgg[1]=0;
	for(int i=2;i<=n;i++)
		lgg[i]=lgg[i/2]+1;

	for(int k=1;(1<<k)<=n;k++)
	{
		int d=1<<(k-1);
		for(int i=1;i<=n;i++)
			for(int j=1;j<=n;j++)
				rmq[i][j][k]=max(max(rmq[i][j][k-1],rmq[i][j+d][k-1]),max(rmq[i+d][j][k-1],rmq[i+d][j+d][k-1]));
	}
	while(m--)
	{
		int a;
		int b;
		int k;
		in>>a>>b>>k;
		int ans=0;
//		cout<<a<<" "<<b<<" "<<k<<"\n"<<"\n";
	//	while((1<<(lg+1))<=k)
	//		lg++;
//	cout<<k<<" "<<lg<<" "<<lgg[k]<<"\n";
		ans=max(rmq[a][b][lgg[k]],rmq[a][b+k-(1<<lgg[k])][lgg[k]]);
		ans=max(ans,max(rmq[a+k-(1<<lgg[k])][b][lgg[k]],rmq[a+k-(1<<lgg[k])][b+k-(1<<lgg[k])][lgg[k]]));
		out<<ans;
		out<<"\n";
	}
	return 0;
}