Pagini recente » Borderou de evaluare (job #3334934) | Borderou de evaluare (job #3303575) | Borderou de evaluare (job #3303577) | Borderou de evaluare (job #3303574) | Cod sursa (job #3305246)
#include <fstream>
using namespace std;
ifstream f("plantatie.in");
ofstream g("plantatie.out");
int rmq[10][505][505];
int e[505];
int n, m;
int main(){
f >> n >> m;
for(int i = 1; i <= n; i++){
for(int j = 1; j <= n; j++){
f >> rmq[0][i][j];
}
}
for(int p = 1; (1 << p) <= n; p++){
for(int i = 1; i <= n; i++){
for(int j = 1; j <= n; j++){
int i2 = i, j2 = j;
if(i + (1 << (p - 1)) <= n){
i2 = i + (1 << (p - 1));
}
if(j + (1 << (p - 1)) <= n){
j2 = j + (1 << (p - 1));
}
rmq[p][i][j] = max(rmq[p - 1][i][j], max(rmq[p - 1][i2][j], max(rmq[p - 1][i][j2], rmq[p - 1][i2][j2])));
}
}
}
e[1] = 0;
for(int i = 2; i <= n; i++){
e[i] = 1 + e[i / 2];
}
for(int t = 1; t <= m; t++){
int i, j, val;
f >> i >> j >> val;
int exp = e[val], lungime = (1 << e[val]);
int i2 = i + val - lungime;
int j2 = j + val - lungime;
g << max(rmq[exp][i][j], max(rmq[exp][i2][j], max(rmq[exp][i][j2], rmq[exp][i2][j2]))) << '\n';
}
}