Pagini recente » Cod sursa (job #2629564) | Cod sursa (job #616829) | Cod sursa (job #2486391) | Cod sursa (job #3193674) | Cod sursa (job #3248892)
#include <fstream>
using namespace std;
const int nmax = 500;
const int log = 17;
int rmq[log][nmax + 1][nmax + 1];
int logg[nmax + 1];
void prec (int n){
for (int i = 1; i <= n; i++){
logg[i] = logg[i / 2] + 1;
}
}
int main(){
ifstream fin ("plantatie.in");
ofstream fout ("plantatie.out");
int n, m;
fin >> n >> m;
for (int i = 1; i <= n; i++){
for (int j = 1; j <= n; j++)
fin >> rmq[0][i][j];
}
prec(n);
for (int k = 1; k <= logg[n]; k++){
int bit = (1 << (k - 1));
for (int i = 1; i <= n - bit; i++)
for (int j = 1; j <= n - bit; j++)
rmq[k][i][j] = max (max (rmq[k - 1][i][j], rmq[k - 1][i + bit][j]), max(rmq[k - 1][i][j + bit], rmq[k - 1][i + bit][j + bit]));
}
while (m --){
int x, y, k;
fin >> x >> y >> k;
int dr = (1 << (logg[k] - 1));
int lg = logg[k] - 1;
fout << max ( max (rmq[lg][x][y], rmq[lg][x + k - dr][y]), max (rmq[lg][x][y + k - dr], rmq[lg][x + k - dr][y + k - dr])) << "\n";
}
return 0;
}