Pagini recente » Cod sursa (job #362403) | Cod sursa (job #2573678) | Cod sursa (job #878587) | Cod sursa (job #3275420) | Cod sursa (job #2642006)
#include <bits/stdc++.h>
using namespace std;
ifstream ci("plantatie.in");
ofstream cou("plantatie.out");
int lg[505];
int rmq[20][505][505];
int n,m;
void pt(){
for(int i=2;i<=n;i++){
lg[i]=lg[i/2]+1;
}
}
int MAX(int a,int b,int c,int d){
return max(max(a,b),max(c,d));
}
void RMQ(){
int i,j,k,l1,l2;
for(k=1;k<=lg[n];k++){
l1=(1<<k);
l2=(1<<(k-1));
for(i=1;i<=n-l1+1;i++){
for(j=1;j<=n-l1+1;j++){
rmq[k][i][j]=MAX(rmq[k-1][i][j],
rmq[k-1][i+l2][j],
rmq[k-1][i][j+l2],
rmq[k-1][i+l2][j+l2]);
}
}
}
}
void afis(){
int i,j,k,l1,l2;
for(k=1;k<=lg[n];k++){
l1=(1<<k);
l2=(1<<(k-1));
for(i=1;i<=n-l1+1;i++){
for(j=1;j<=n-l1+1;j++){
cout<<k<<" "<<i<<" "<<j<<" "<<rmq[k][i][j]<<"\n";
}
}
}
}
int Query(int i,int j,int c){
int l1=lg[c];
int l2=(1<<l1);
return MAX(rmq[l1][i][j],
rmq[l1][i+c-l2][j],
rmq[l1][i][j+c-l2],
rmq[l1][i+c-l2][j+c-l2]);
}
void citire(){
ci>>n>>m;
int i,j;
int a,b,c;
for(i=1;i<=n;i++){
for(j=1;j<=n;j++){
ci>>rmq[0][i][j];
}
}
pt();
RMQ();
///afis();
for(i=1;i<=m;i++){
ci>>a>>b>>c;
cou<<Query(a,b,c)<<"\n";
}
}
int main()
{
citire();
return 0;
}