Pagini recente » Monitorul de evaluare | Cod sursa (job #95887) | Cod sursa (job #652169) | Profil StarGold2 | Cod sursa (job #1043129)
#include <fstream>
#include <algorithm>
#include <vector>
using namespace std;
ifstream cin("plantatie.in");
ofstream cout("plantatie.out");
const int nmax = 502;
int lg[nmax];
int n, m;
int rmq[10][nmax][nmax];
int a[nmax][nmax];
void readData() {
cin >> n >> m;
for (int i = 1;i <= n;i++) {
for (int j = 1;j <= n;j++) {
cin >> a[i][j];
}
}
}
void compute() {
for (int i = 1;i <= n;i++) {
for (int j = 1;j <= n;j++) {
rmq[0][i][j] = a[i][j];
}
}
for (int i = 2;i <= n;i++) {
lg[i] = lg[i >> 1] + 1;
}
for (int i = 1;(1 << i) <= n;i++) {
for (int j = 1;j <= n - (1 << i) + 1;j++) {
for (int k = 1;k <= n - (1 << i) + 1;k++) {
rmq[i][j][k] = max(max(rmq[i - 1][j][k],rmq[i - 1][j + (1 << (i - 1))][k]),
max(rmq[i - 1][j][k + (1 << (i - 1))],rmq[i - 1][j + (1 << (i - 1))][k + (1 << (i - 1))]));
}
}
}
}
inline int query(int i,int j,int k) {
int l = lg[k];
return max(max(rmq[l][i][j],rmq[l][i + k - (1 << l)][j]),
max(rmq[l][i + k - (1 << l)][j + k - (1 << l)],rmq[l][i][j + k - (1 << l)]));
}
int main()
{
readData();
compute();
for (int i = 1;i <= m;i++) {
int x, y, z;
cin >> x >> y >> z;
cout << query(x,y,z) << "\n";
}
return 0;
}