Pagini recente » Cod sursa (job #1469683) | Cod sursa (job #2962178) | Cod sursa (job #2266355) | Cod sursa (job #102420) | Cod sursa (job #2400704)
#include <iostream>
#include <fstream>
using namespace std;
ifstream fin("plantatie.in");
ofstream fout("plantatie.out");
const int NMAX = 501;
int N, Q;
int rmq[10][NMAX][NMAX];
int log[NMAX];
void Read()
{
fin >> N >> Q;
for(int i = 1; i <= N; ++i)
for(int j = 1; j <= N; ++j)
fin >> rmq[0][i][j];
log[2] = 1;
for(int i = 3; i <= N; ++i)
log[i] = log[i/2] + 1;
for(int l = 1; ( 1 << l ) <= N; ++l)
for(int i = 1; i <= N - ( 1 << l ) + 1; ++i)
for(int j = 1; j <= N - ( 1 << l ) + 1; ++j)
{
int A = max(rmq[l-1][i][j], rmq[l-1][i+(1<<(l-1))][j+(1<<(l-1))]);
int B = max(rmq[l-1][i+(1<<(l-1))][j], rmq[l-1][i][j+(1<<(l-1))]);
rmq[l][i][j] = max(A, B);
}
/*for(int l = 0; (1 << l) <= N; ++l){
for(int i = 1; i <= N - ( 1 << l ) + 1; ++i){
for(int j = 1; j <= N - ( 1 << l ) + 1; ++j)
fout << rmq[l][i][j] << ' ';
fout << '\n';
}
fout << "\n\n";
}*/
int i, j, l;
for(int q = 1; q <= Q; ++q)
{
fin >> i >> j >> l;
int x = i + l;
int y = j + l;
l = log[l];
int A = max(rmq[l][i][j], rmq[l][x-(1<<l)][y-(1<<l)]);
int B = max(rmq[l][x-(1<<l)][j], rmq[l][i][y-(1<<l)]);
//fout << rmq[l][i][j] << ' ' << rmq[l][i+(1<<l)-1][j+(1<<l)-1] << ' ' << rmq[l][i+(1<<l)-1][j] << ' ' << rmq[l][i][j+(1<<l)-1] << ' ';
fout << max(A, B) << '\n';
}
}
int main()
{
Read();
return 0;
}