Pagini recente » Cod sursa (job #1713252) | Cod sursa (job #2510519) | Cod sursa (job #2975528) | Cod sursa (job #3170781) | Cod sursa (job #1598700)
#include <fstream>
#include <vector>
using namespace std;
ifstream is("plantatie.in");
ofstream os("plantatie.out");
void Read();
void RMQ();
void Query();
int n, m;
int log2[501];
int r[501][501][10];
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()
{
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;
for ( int i = 1; i <= n; ++i )
for ( int j = 1; j <= n; ++j )
is >> r[i][j][0];
}