Pagini recente » Cod sursa (job #3158525) | Cod sursa (job #376234) | Cod sursa (job #1725501) | Cod sursa (job #2759721) | Cod sursa (job #1598696)
#include <cstdio>
#include <vector>
using namespace std;
FILE * is = fopen("plantatie.in", "r");
FILE * os = fopen("plantatie.out", "w");
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();
fclose(is);
fclose(os);
return 0;
}
void Query()
{
int i, j, k, val;
while ( m-- )
{
fscanf(is, "%d%d%d", &i, &j, &k);
val = log2[k];
fprintf(os, "%d\n", 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])));
}
}
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()
{
fscanf(is, "%d%d", &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 )
fscanf(is, "%d", &r[i][j][0]);
}