Pagini recente » Cod sursa (job #369592) | Cod sursa (job #940202) | Cod sursa (job #631202)
Cod sursa(job #631202)
#include <fstream>
using namespace std;
ifstream in("plantatie.in");
ofstream out("plantatie.out");
const int N=501;
int a[10][N][N],lg[N],n,m;// Vom calcula folosind algoritmul RMQ in 2D maximul din o matrice de latura 2^k pornind din punctul i,j;
void citire(){
int i,j;
in>>n>>m;
for(i=1;i<=n;++i){
for(j=1;j<=n;++j){
in>>a[0][i][j];
}
}
}
inline int max(int a,int b){
if(a>b)
return a;
return b;
}
void RMQ(){
int i,j,k,x,y,l,aux;
lg[1]=0;
for(i=2;i<=n;i++){
lg[i]=lg[i/2]+1;
}
for(k=1;k<=lg[n];k++){
for(i=1;i<=n;++i){
for(j=1;j<=n;++j){
a[k][i][j]=max(max(a[k-1][i][j],a[k-1][i+(1<<k-1)][j]),max(a[k-1][i][j+(1<<k-1)],a[k-1][i+(1<<k-1)][j+(1<<k-1)]));
}
}
}
for(i=1;i<=m;i++){
in>>x>>y>>l;
aux=lg[l];
out<<max(max(a[aux][x][y],a[aux][x+l-(1<<aux)][y]),max(a[aux][x][y+l-(1<<aux)],a[aux][x+l-(1<<aux)][y+l-(1<<aux)]))<<"\n";
}
}
int main(){
citire();
RMQ();
return 0;
}