Pagini recente » Cod sursa (job #3296765) | Cod sursa (job #858609) | Cod sursa (job #1441675) | Cod sursa (job #3236997) | Cod sursa (job #3295668)
#include <bits/stdc++.h>
#define DIM 501
using namespace std;
ifstream fin("plantatie.in");
ofstream fout("plantatie.out");
const int LOG = 10;
int n,q,lin,col,lat;
int E[DIM];
int a[DIM][DIM];
int rmq[LOG][DIM][DIM];
void build_log(){
E[1] = 0;
for(int i=2;i<=n;i++)
E[i] = 1 + E[i/2];
}
void build_sparse(){
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
rmq[0][i][j] = a[i][j];
}
}
for(int k=1;(1<<k)<=n;k++){
int len = 1 << (k-1);
for(int i=1;i+(1<<k)-1<=n;i++){
for(int j=1;j+(1<<k)-1<=n;j++){
rmq[k][i][j] = max({
rmq[k-1][i][j],
rmq[k-1][i+len][j],
rmq[k-1][i][j+len],
rmq[k-1][i+len][j+len]
});
}
}
}
}
int Query(int i, int j, int k){
int p = E[k];
int len = 1 << p;
return max({
rmq[p][i][j],
rmq[p][i+k-len][j],
rmq[p][i+k-len][j+k-len],
rmq[p][i][j+k-len]
});
}
int main(){
fin >> n >> q;
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
fin >> a[i][j];
build_sparse();
build_log();
while(q--){
fin >> lin >> col >> lat;
fout << Query(lin,col,lat) << '\n';
}
return 0;
}