Pagini recente » Cod sursa (job #3185189) | Cod sursa (job #3237464) | Cod sursa (job #2217580) | Cod sursa (job #2504843) | Cod sursa (job #1433982)
#include <fstream>
#include <iostream>
#include <algorithm>
using namespace std;
ifstream fin("plantatie.in");
ofstream fout("plantatie.out");
int n, m, lg[501], rmq[9][501][501];
int max4 (int a, int b, int c, int d){
if (a >= b && a >= c && a >= d)
return a;
if (b >= a && b >= c && c >= d)
return b;
if (c >= a && c >= b && c >= d)
return c;
return d;
}
void create_lg(int n){
lg[1] = 0;
for (int i = 2; i <= n; i++)
lg[i] = lg[i/2] + 1;
}
void create_rmq(int n){
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++)
rmq[k][i][j] = max4(rmq[k-1][i][j],
rmq[k-1][i][j + (1 << k)/2],
rmq[k-1][i + (1 << k)/2][j],
rmq[k-1][i + (1 << k)/2][j + (1 << k)/2]);
}
int main()
{
fin >> n >> m;
for (int i = 1; i <= n ; i++)
for (int j = 1; j <= n; j++)
fin >> rmq[0][i][j];
create_lg(n);
create_rmq(n);
for(int a, b, c, d, l; m; m--){
fin >> a >> b >> l;
c = a + l - 1; d = b + l - 1;
int i = lg[l - 1];
fout << max4(rmq[i][a][b],
rmq[i][a][d - (1 << i) + 1],
rmq[i][c - (1 << i) + 1][b],
rmq[i][c - (1 << i) + 1][d - (1 << i) + 1]) <<'\n';
}
return 0;
}