Pagini recente » Cod sursa (job #1143266) | Cod sursa (job #1495257) | Cod sursa (job #3168688) | Cod sursa (job #1570427) | Cod sursa (job #2372741)
#include <bits/stdc++.h>
using namespace std;
ifstream fin ("plantatie.in");
ofstream fout ("plantatie.out");
int n, a[505][505], q, lg, lin, col, k;
int table[20][505][505];
void Citire()
{
fin >> n >> q;
for (int i = 0; i < n; i++)
{
for (int j = 0; j < n; j++)
{
fin >> a[i][j];
table[0][i][j] = a[i][j];
}
}
}
int p2(int x)
{
return (1 << x);
}
int maxim(int v1, int v2, int v3, int v4)
{
return max(v1, max(v2, max(v3, v4)));
}
void Precalc()
{
lg = log2(n);
for (int l = 1; l <= lg; l++)
{
for (int i = 0; i < n; i++)
{
for (int j = 0; j < n; j++)
{
table[l][i][j] = maxim(table[l - 1][i][j], table[l - 1][i + p2(l - 1)][j],
table[l - 1][i][j + p2(l - 1)], table[l - 1][i + p2(l - 1)][j + p2(l - 1)]);
}
}
}
}
int get_Max()
{
int len = log2(k);
int lin2 = lin + (k - p2(len));
int col2 = col + (k - p2(len));
return maxim(table[len][lin][col], table[len][lin2][col], table[len][lin][col2], table[len][lin2][col2]);
}
void Query()
{
for (int i = 1; i <= q; i++)
{
fin >> lin >> col >> k;
lin--;
col--;
fout << get_Max() << "\n";
}
}
int main()
{
Citire();
Precalc();
Query();
return 0;
}