Pagini recente » Cod sursa (job #2197749) | Cod sursa (job #2964178) | Istoria paginii planificare/sedinta-20091126 | Cod sursa (job #317544) | Cod sursa (job #2079334)
#define DM 501
#define DN 10
#include <fstream>
using namespace std;
ifstream fi ("plantatie.in");
ofstream fo ("plantatie.out");
int rmq[DM][DM][DN], lg[DM], n, m, a, b, c, d, aux1, aux2, aux3, aux4;
int main()
{
fi >> n >> m;
for (int i = 2; i < DM; ++i)
lg[i] = lg[i/2] + 1;
for (int i = 1; i <= n; ++i)
for (int j = 1; j <= n; ++j)
fi >> rmq[i][j][0];
for (int i = 1; i <= lg[n]; ++i)
for (int x = 1; x + (1<<i) - 1 <= n; ++x)
for (int y = 1; y + (1<<i) - 1 <= n; ++y)
{
aux1 = rmq[x][y][i-1];
aux2 = rmq[x][y+(1<<(i-1))][i-1];
aux3 = rmq[x+(1<<(i-1))][y][i-1];
aux4 = rmq[x+(1<<(i-1))][y+(1<<(i-1))][i-1];
rmq[x][y][i] = max(max(aux1, aux2), max(aux3, aux4));
}
for (int i = 1; i <= m; ++i)
{
fi >> a >> b >> c;
d = lg[c];
aux1 = rmq[a][b][d];
aux2 = rmq[a][b+c-(1<<d)][d];
aux3 = rmq[a+c-(1<<d)][b][d];
aux4 = rmq[a+c-(1<<d)][b+c-(1<<d)][d];
fo << max(max(aux1, aux2), max(aux3, aux4)) << '\n';
}
return 0;
}