Pagini recente » Cod sursa (job #132158) | Cod sursa (job #2465354) | Cod sursa (job #3329687) | Monitorul de evaluare | Cod sursa (job #3330572)
#include <bits/stdc++.h>
using namespace std;
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
// ifstream cin("divquery.in");
// ofstream cout("divquery.out");
int n, m;
cin >> n >> m;
vector<vector<int>> input(n, vector<int>(n));
for (auto &vec : input)
for (auto &x : vec)
cin >> x;
int max_lg = __lg(n);
vector<vector<vector<int>>> rmq(max_lg + 1);
rmq[0] = move(input);
for (int k = 0; k < max_lg; k++)
{
int len = 1 << k;
rmq[k + 1] = vector<vector<int>>(n - (len<<1) + 1, vector<int>(n - (len << 1) + 1));
for (int i = 0; i + len < rmq[k].size(); i++)
for (int j = 0; j + len < rmq[k].size(); j++)
rmq[k+1][i][j] = max({rmq[k][i][j], rmq[k][i + len][j], rmq[k][i][j + len], rmq[k][i + len][j + len]});
}
while (m--)
{
int a, b, len;
cin >> a >> b >> len;
a--;b--;
int len_lg = __lg(len);
cout << max({rmq[len_lg][a][b], rmq[len_lg][a + len - (1<<len_lg)][b], rmq[len_lg][a][b + len - (1<<len_lg)], rmq[len_lg][a + len - (1<<len_lg)][b + len - (1<<len_lg)]}) << '\n';
}
}