Pagini recente » Cod sursa (job #615004) | Cod sursa (job #2958499) | Cod sursa (job #860807) | Cod sursa (job #953291) | Cod sursa (job #2052426)
#include <fstream>
#define DIM 502
using namespace std;
ifstream f("plantatie.in");
ofstream g("plantatie.out");
int n, m, d[11][DIM][DIM], maxim, p[DIM], x, y, l, put;
void Maxx(int k, int i, int j){
int i2 = i + (1 << (k - 1));
int j2 = j + (1 << (k - 1));
maxim = -1;
if(d[k - 1][i][j] > maxim)
maxim = d[k - 1][i][j];
if(d[k - 1][i][j2] > maxim)
maxim = d[k - 1][i][j2];
if(d[k - 1][i2][j] > maxim)
maxim = d[k - 1][i2][j];
if(d[k - 1][i2][j2] > maxim)
maxim = d[k - 1][i2][j2];
d[k][i][j] = maxim;
}
void Maxx2(int k, int i, int j, int l){
int i2 = i + l - 1;
int j2 = j + l - 1;
maxim = -1;
maxim = max(d[k][i][j], max(d[k][i][j2 - (1 << k) + 1], max(d[k][i2 - (1 << k) + 1][j], d[k][i2 - (1 << k) + 1][j2 - (1 << k) + 1])));
}
int main(){
f>>n>>m;
for(int i = 1; i <= n; ++ i)
for(int j = 1; j <= n; ++ j)
f>>d[0][i][j];
for(int k = 1; (1 << k) <= n; ++ k)
for(int i = 1; i <= n; ++ i)
for(int j = 1; j <= n; ++ j)
Maxx(k, i, j);
for(int i = 2; i <= n; ++ i){
p[i] = 1 + p[i / 2];
}
for(int i = 1; i <= m; ++ i){
f>>x>>y>>l;
put = p[l];
Maxx2(put, x, y, l);
g<<maxim<<'\n';
}
return 0;
}