Cod sursa(job #2442145)

Utilizator Iulia25Hosu Iulia Iulia25 Data 22 iulie 2019 22:26:24
Problema Plantatie Scor 50
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.96 kb
#include <fstream>
//#include <iostream>

using namespace std;

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

long long n, m, k, a[505][505];
int Max[505][505][10], ls, lj, cs, cj;

int main()  {
  fin >> n >> m;
	for (int i = 1; i <= n; ++i)  {
		for (int j = 1; j <= n; ++j)  {
			fin >> a[i][j];
			Max[i][j][1] = a[i][j];
		}
		for (int l = 2, k = 1; k <= n; ++l, k <<= 1)  {
			for (int J = 1; J <= n - 2 * k + 1; ++J)
				Max[i][J][l] = max(Max[i][J][l - 1], Max[i][J + k][l - 1]);
		}
	}
	int V[15];
	int LOG[1005];
	V[1] = 1;
	LOG[1] = 1;
	for (int i = 2; i <= 10; ++i)  {
    V[i] = V[i - 1] * 2;
    LOG[V[i]] = i;
  }
  for (int i = 1; i <= 500; ++i)
    if (!LOG[i])
      LOG[i] = LOG[i - 1];
	for (int i = 1; i <= m; ++i)  {
		fin >> ls >> cs >> k;
		lj = ls + k - 1;
		cj = cs + k - 1;
		int ans = 0;
		for (int j = ls; j <= lj; ++j)
			ans = max(ans, max(Max[j][cs][LOG[k]], Max[j][cj - V[LOG[k]] + 1][LOG[k]]));
		fout << ans << '\n';
	}
	return 0;
}