Pagini recente » Cod sursa (job #947966) | Cod sursa (job #2568425) | Cod sursa (job #2970712) | Cod sursa (job #1756355) | Cod sursa (job #1598682)
#include <fstream>
#include <vector>
using namespace std;
ifstream is("plantatie.in");
ofstream os("plantatie.out");
using VI = vector<int>;
using VVI = vector<VI>;
using VVVI = vector<VVI>;
void Read();
void RMQ();
void Query();
int n, m;
VI log2;
VVVI r;
int main()
{
Read();
RMQ();
Query();
is.close();
os.close();
return 0;
}
void Query()
{
int i, j, k, val;
while ( m-- )
{
is >> i >> j >> k;
val = log2[k];
os << max(max(r[i][j][val], r[i + k - ( 1 << val )][j + k - ( 1 << val )][val]), max(r[i + k - ( 1 << val )][j][val], r[i][j + k - ( 1 << val )][val])) << "\n";
}
}
void RMQ()
{
log2 = VI(n + 1);
for ( int i = 2; i <= n; ++i )
log2[i] = log2[i / 2] + 1;
for ( int k = 1; ( 1 << k ) <= n; ++k )
for ( int i = 1; i + ( 1 << k ) - 1 <= n; ++i )
for ( int j = 1; j + ( 1 << k ) - 1 <= n; ++j )
r[i][j][k] = max(max(r[i][j][k - 1], r[i + ( 1 << ( k - 1 ) )][j + ( 1 << ( k - 1 ) )][k - 1]), max(r[i + ( 1 << ( k - 1 ) )][j][k - 1], r[i][j + ( 1 << ( k - 1 ) )][k - 1]));
}
void Read()
{
is >> n >> m;
r = VVVI(n + 1, VVI(n + 1, VI(10)));
for ( int i = 1; i <= n; ++i )
for ( int j = 1; j <= n; ++j )
is >> r[i][j][0];
}