Pagini recente » Cod sursa (job #2033563) | Cod sursa (job #1015492) | Cod sursa (job #2489082) | Cod sursa (job #25015) | Cod sursa (job #2738899)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("plantatie.in");
ofstream fout("plantatie.out");
int n, m;
int v[505][505][10];
int logaritm[505];
int dami_maximu_am_zis(int a, int b, int c, int d)
{
int maxim = -1;
maxim = max(maxim,a);
maxim = max(maxim,b);
maxim = max(maxim,c);
maxim = max(maxim,d);
return maxim;
}
void precalc()
{
logaritm[1] = 0;
for(int i = 2; i <= 500; i ++)
{
logaritm[i] = logaritm[i / 2] + 1;
}
for(int i = 1; i <= 9; i ++)
{
for(int j = 1; j + (1 << i) - 1 <= n; j ++)
{
for(int q = 1; q + (1 << i) - 1 <= n; q ++)
{
int p2 = (1 << (i-1));
v[q][j][i] = dami_maximu_am_zis(v[q][j][i-1], v[q + p2][j][i-1], v[q][j + p2][i-1], v[q + p2][j + p2][i-1]);
}
}
}
}
int rmq(int lin, int col, int lat)
{
int logg = logaritm[lat];
int lfinal = lin + lat - 1;
int cfinal = col + lat - 1;
return dami_maximu_am_zis(v[lin][col][logg], v[lfinal - (1<<logg) + 1][col][logg], v[lin][cfinal - (1<<logg) + 1][logg], v[lfinal - (1<<logg) + 1][cfinal - (1<<logg) + 1][logg]);
}
int main()
{
fin >> n >> m;
for(int i = 1; i <= n; i ++)
{
for(int j = 1; j <= n; j ++)
{
fin >> v[i][j][0];
}
}
precalc();
while(m--)
{
int lin, col, lat;
fin >> lin >> col >> lat;
fout << rmq(lin,col,lat) << '\n';
}
return 0;
}