Pagini recente » Cod sursa (job #2554062) | Cod sursa (job #1767626) | Cod sursa (job #289251) | Cod sursa (job #1754242) | Cod sursa (job #1904819)
#include <fstream>
#include <iostream>
#include <climits>
using namespace std;
ifstream f("plantatie.in");
ofstream g("plantatie.out");
int RMQ[10][510][510];
int n, m;
int lg[510];
void read()
{
f >> n >> m;
lg[1] = 0;
for (int i = 1; i <= n; i++)
{
lg[i + 1] = lg[(i + 1) >> 1] + 1;
for (int j = 1; j <= n; j++)
f >> RMQ[0][i][j];
}
}
inline int max(int a,int b)
{
return a > b ? a : b;
}
inline int max(int a,int b,int c)
{
return max(a, b) > c ? max(a, b) : c;
}
inline int max(int a,int b,int c,int d)
{
return max(a, b, c) > d ? max(a, b, c) : d;
}
void preprocess()
{
for (int size = 1; size <= lg[n];size++)
{
for (int i = 1; i <= n;i++)
{
for (int j = 1; j <= n;j++)
{
if (i + (1 << size) -1 <= n && j + (1 << size) - 1 <= n)
{
RMQ[size][i][j] = max(
RMQ[size - 1][i][j],
RMQ[size - 1][i + (1 << (size - 1))][j],
RMQ[size - 1][i + (1 << (size - 1))][j + (1 << (size - 1))],
RMQ[size - 1][i][j + (1 << (size - 1))]
);
}
else
{
RMQ[size][i][j] = RMQ[size - 1][i][j];
}
}
}
}
}
int querry(int i,int j,int size)
{
int log = lg[size];
int dif = size - (1 << log);
if((size & (size - 1)) == 0)
{
return RMQ[lg[size]][i][j];
}
else
{
return max(
RMQ[lg[size]][i][j],
RMQ[lg[size]][i + dif][j],
RMQ[lg[size]][i + dif][j + dif],
RMQ[lg[size]][i][j + dif]
);
}
}
void prelucration()
{
int q, j, size;
for (int i = 0; i < m;i++)
{
f >> q >> j >> size;
g << querry(q, j, size) << '\n';
}
}
int main()
{
read();
preprocess();
prelucration();
f.close();
g.close();
return 0;
}