Pagini recente » Cod sursa (job #530217) | Cod sursa (job #720764) | Cod sursa (job #2227882) | selectie_emag_mediu_2016_runda2 | Cod sursa (job #1434579)
#include <fstream>
using namespace std;
ifstream fin("plantatie.in");
ofstream fout("plantatie.out");
int n, m, lg[501], rmq[9][501][501];
int max4 (int a, int b, int c, int d) {
if (a >= b && a >= c && a >= d)
return a;
if (b >= a && b >= c && b >= d)
return b;
if (c >= a && c >= b && c >= d)
return c;
return d;
}
void create_lg(int n) {
lg[1] = 0;
for (int i = 2; i <= n; i++)
lg[i] = lg[i / 2] + 1;
}
void create_rmq(int n) {
for (int k = 1; (1 << k) <= n; k++)
for (int i = 1; i + (1 << k) - 1 <= n; i++)
for (int j = 1; j + (1 << k) - 1 <= n; j++)
rmq[k][i][j] = max4(rmq[k - 1][i][j],
rmq[k - 1][i][j + (1 << k) / 2],
rmq[k - 1][i + (1 << k) / 2][j],
rmq[k - 1][i + (1 << k) / 2][j + (1 << k) / 2]);
}
int main() {
fin >> n >> m;
for (int i = 1; i <= n ; i++)
for (int j = 1; j <= n; j++)
fin >> rmq[0][i][j];
create_lg(n);
create_rmq(n);
for(int a, b, c, d, l; m; m--) {
fin >> a >> b >> l;
c = a + l - 1;
d = b + l - 1;
int i = lg[l - 1];
fout << max4(rmq[i][a][b],
rmq[i][a][d - (1 << i) + 1],
rmq[i][c - (1 << i) + 1][b],
rmq[i][c - (1 << i) + 1][d - (1 << i) + 1]) << '\n';
}
return 0;
}