Pagini recente » Cod sursa (job #2037537) | Cod sursa (job #1188110) | Cod sursa (job #892471) | Cod sursa (job #477048) | Cod sursa (job #3254556)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("plantatie.in");
ofstream fout("plantatie.out");
const int NMAX = 505, LOG = 10;
int a[NMAX][NMAX], rmq[NMAX][NMAX][LOG];
inline int maxim(int a, int b, int c, int d)
{
return max(max(a, b), max(c, d));
}
void build_rmq(int n)
{
for(int i = 1; i <= n; i++)
for(int j = 1; j <= n; j++)
rmq[i][j][0] = a[i][j];
for(int p = 1; p < LOG; p++)
for(int i = 1; i + (1 << p) - 1 <= n; i++)
for(int j = 1; j + (1 << p) - 1 <= n; j++)
rmq[i][j][p] = maxim(rmq[i][j][p-1], rmq[i+(1<<(p-1))][j][p-1], rmq[i][j+(1<<(p-1))][p-1], rmq[i+(1<<(p-1))][j+(1<<(p-1))][p-1]);
}
int query(int i, int j, int lat)
{
int e = 31 - __builtin_clz(lat);
return maxim(rmq[i][j][e], rmq[i+lat-(1<<e)][j][e], rmq[i][j+lat-(1<<e)][e], rmq[i+lat-(1<<e)][j+lat-(1<<e)][e]);
}
int main()
{
int n, m;
fin >> n >> m;
for(int i = 1; i <= n; i++)
for(int j = 1; j <= n; j++)
fin >> a[i][j];
build_rmq(n);
while(m--)
{
int i, j, lat;
fin >> i >> j >> lat;
fout << query(i, j, lat) << "\n";
}
return 0;
}