Pagini recente » Cod sursa (job #1663782) | Cod sursa (job #2877039) | Cod sursa (job #1618466) | Cod sursa (job #159257) | Cod sursa (job #2592995)
#include <fstream>
using namespace std;
int rmq[10][501][501];
int lg[501];
inline int maxi(int a, int b, int c, int d)
{
if(a>b && a>c && a>d)
return a;
else
if(b>a && b>c && b>d)
{
return b;
}
else
if(c>a && c>b && c>d)
{
return c;
}
else
return d;
}
int main() {
ifstream fin("plantatie.in");
ofstream fout("plantatie.out");
int n, m;
fin >> n >> m;
lg[1] = 0;
for (int i = 2; i <= n; i++) {
lg[i] = 1 + lg[i / 2];
}
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= n; j++) {
fin >> rmq[0][i][j];
}
}
int log = lg[n];
for (int i = 1; (1<<i) <= n; i++) {
int l = (1 << (i - 1));
for (int j = (1 << i); j <= n; j++) {
for (int k = (1 << i); k <= n; k++) {
rmq[i][j][k] = maxi(rmq[i - 1][j][k],rmq[i - 1][j][k - l],rmq[i - 1][j - l][k], rmq[i - 1][j - l][k - l]);
}
}
}
for (int w=1; w<=m ; w++) {
int a, b, lat;
fin >> a >> b >> lat;
a += lat - 1;
b += lat - 1;
int l = lg[lat];
int pow = 1 << l;
fout << maxi(rmq[l][a][b], rmq[l][a][b - lat + pow],rmq[l][a - lat + pow][b], rmq[l][a - lat + pow][b - lat + pow]) << '\n';
}
return 0;
}