Pagini recente » Cod sursa (job #98258) | Cod sursa (job #419819) | Cod sursa (job #1339951) | Cod sursa (job #1544438) | Cod sursa (job #3171488)
#include <fstream>
using namespace std;
const int NMAX = 502;
ifstream cin("plantatie.in");
ofstream cout("plantatie.out");
int rmq[12][12][NMAX][NMAX];
int n;
void init()
{
for(int sizi = 0; (1 << sizi) <= n; sizi++)
{
for(int sizj = 0; (1 << sizj) <= n; sizj++)
{
if(sizi == 0 && sizj == 0)
continue;
for(int i = 0; i + (1 << sizi) <= n; i++)
{
for(int j = 0; j + (1 << sizj) <= n; j++)
{
int max1 = max(rmq[max(sizi - 1, 0)][max(sizj - 1, 0)][i][j],
rmq[max(sizi - 1, 0)][max(sizj - 1, 0)][i + (1 << (max((sizi - 1), 0)))][j]);
int max2 = max(rmq[max(sizi - 1, 0)][max(sizj - 1, 0)][i][j + (1 << max((sizj - 1), 0))],
rmq[max(sizi - 1, 0)][max(sizj - 1, 0)][i + (1 << max((sizi - 1), 0))][j + (1 << max((sizj - 1), 0))]);
rmq[sizi][sizj][i][j] = max(max1, max2);
}
}
}
}
}
int query(int i1, int j1, int i2, int j2)
{
int sizi = 31 - __builtin_clz(i2 - i1);
int sizj = 31 - __builtin_clz(j2 - j1);
int max1 = max(rmq[sizi][sizj][i1][j1], rmq[sizi][sizj][i2 + 1 - (1 << sizi)][j1]);
int max2 = max(rmq[sizi][sizj][i1][j2 + 1 - (1 << sizj)],
rmq[sizi][sizj][i2 + 1 - (1 << sizi)][j2 + 1 - (1 << sizj)]);
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][0][i][j];
}
init();
while(m--)
{
cin >> x >> y >> k;
cout << query(x, y, x + k - 1, y + k - 1) << '\n';
}
return 0;
}