Pagini recente » Cod sursa (job #2587560) | Cod sursa (job #1598321) | Cod sursa (job #1865613) | Monitorul de evaluare | Cod sursa (job #2011460)
#include <iostream>
#include <fstream>
using namespace std;
ifstream in ("plantatie.in");
ofstream out ("plantatie.out");
int const nmax = 500;
int n;
int rmq[12][nmax + 1][nmax + 1];
int v[1 + nmax][1 + nmax];
int lg[1 + nmax];
void computermq(){
for(int h = 1 ; h <= lg[n] ;h++){
int lim = n - lg[h] + 1;
for(int i = 1 ;i <= lim ;i++){
for(int j = 1 ;j <= lim ;j++){
int val = rmq[h - 1][i][j];
if(val < rmq[h - 1][i + (1 << (h - 1) )][j] ){
val = rmq[h - 1][i + (1 << (h - 1) )][j];
}
if(val < rmq[h - 1][i][j + (1 << (h - 1) ) ] ){
val = rmq[h - 1][i][j + (1 << (h - 1) ) ];
}
if(val < rmq[h - 1][i + (1 << (h - 1) )][j + (1 << (h - 1) )] ){
val = rmq[h - 1][i + (1 << (h - 1) )][j + (1 << (h - 1) )];
}
rmq[h][i][j] = val;
}
}
}
}
int main()
{
int q;
in>>n>>q;
for(int i = 2 ; i <= n ;i++){
lg[i] = lg[(i >> 1)] + 1;
}
for(int i = 1 ; i <= n ;i++){
for(int j = 1 ; j <= n ;j++){
in>>v[i][j];
rmq[0][i][j] = v[i][j];
}
}
computermq();
int x , y , k;
for(int i = 0 ; i < q ;i++){
in>>x>>y>>k;
int h = lg[k];
int val = rmq[h][x][y];
if(val < rmq[h ][x + k - (1 << h )][y] ){
val = rmq[h][x + k - (1 << h )][y];
}
if(val < rmq[h][x][y + k - (1 << h ) ] ){
val = rmq[h ][x][y + k - (1 << h ) ];
}
if(val < rmq[h][x + k - (1 << h )][y + k - (1 << h )] ){
val = rmq[h ][x + k - (1 << h )][y + k - (1 << h )];
}
out<<val<<'\n';
}
return 0;
}