Pagini recente » Cod sursa (job #2342385) | Cod sursa (job #346203) | Cod sursa (job #1167275) | Cod sursa (job #2800999) | Cod sursa (job #3171608)
#include <fstream>
using namespace std;
const int NMAX = 502;
const int LMAX = 12;
ifstream cin("plantatie.in");
ofstream cout("plantatie.out");
int rmq[LMAX][NMAX][NMAX];
int n;
void init()
{
for(int siz = 1; (1 << siz) <= n; siz++)
{
for(int i = 0; i + (1 << siz) - 1 <= n; i++)
{
for(int j = 0; j + (1 << siz) - 1 <= n; j++)
{
int max1 = max(rmq[siz - 1][i][j],
rmq[siz - 1][i + (1 << (siz - 1))][j]);
int max2 = max(rmq[siz - 1][i][j + (1 << (siz - 1))],
rmq[siz - 1][i + (1 << ( siz - 1))][j + (1 << (siz - 1))]);
rmq[siz][i][j] = max(max1, max2);
/*rmaxq[i][j][k] = maxim(rmaxq[i][j][k - 1],
maxim(rmaxq[i + (1 << (k - 1))][j][k - 1],
maxim(rmaxq[i][j + (1 << (k - 1))][k - 1],
rmaxq[i + (1 << (k - 1))][j + (1 << (k - 1))][k - 1])));*/
}
}
}
}
int query(int i1, int j1, int i2, int j2)
{
int siz = 31 - __builtin_clz(i2 - i1);
int max1 = max(rmq[siz][i1][j1], rmq[siz][i2 + 1 - (1 << siz)][j1]);
int max2 = max(rmq[siz][i1][j2 + 1 - (1 << siz)],
rmq[siz][i2 + 1 - (1 << siz)][j2 + 1 - (1 << siz)]);
return max(max1, max2);
}
int main()
{
int m, x, y, k;
cin >> n >> m;
for(int i = 1; i <= n; i++)
{
for(int j = 1; j <= n; j++)
cin >> rmq[0][i][j];
}
init();
while(m--)
{
cin >> x >> y >> k;
cout << query(x, y, x + k - 1, y + k - 1) << '\n';
}
return 0;
}