Pagini recente » Cod sursa (job #1527019) | Cod sursa (job #1892789) | Cod sursa (job #1143528) | Cod sursa (job #818877) | Cod sursa (job #3137617)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("plantatie.in");
ofstream fout("plantatie.out");
int t[505][505][11];
int q[505];
void preprocess(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++)
t[i][j][k] = max(max(t[i][j][k - 1], t[i + (1 << (k - 1))][j + (1 << (k - 1))][k - 1]), max(t[i + (1 << (k - 1))][j][k - 1], t[i][j + (1 << (k - 1))][k - 1]));
}
}
}
int rmq(int i, int j, int k){
int l = q[k];
return max(max(t[i][j][l], t[i + k - (1 << l)][j + k - (1 << l)][l]), max(t[i + k - (1 << l)][j][l], t[i][j + k + (1 << l)][l]));
}
int main()
{
int n,m,i,j,x,y,k;
fin >> n >> m;
for(i = 1; i <= n; i++){
for(j = 1; j <= n; j++) fin >> t[i][j][0];
}
for(i = 2; i <= 500; i++){
q[i] = q[i / 2] + 1;
//fout << i << " " << q[i] << "\n";
}
preprocess(n);
for(i = 1; i <= m; i++){
fin >> x >> y >> k;
fout << rmq(x,y,k) << "\n";
}
return 0;
}