Pagini recente » Cod sursa (job #2089622) | Cod sursa (job #3186498) | Cod sursa (job #2197403) | Cod sursa (job #3173567)
#include <fstream>
using namespace std;
ifstream cin("plantatie.in");
ofstream cout("plantatie.out");
const int NMAX = 500;
const int LOGMAX = 9;
int n, Q;
int a[NMAX + 1][NMAX + 1];
int RMQ[LOGMAX + 1][NMAX + 1][NMAX + 1];
int LOG[NMAX + 1];
int Maxim(int a, int b, int c, int d)
{
int maxi = a;
maxi = max(maxi, b);
maxi = max(maxi, c);
maxi = max(maxi, d);
return maxi;
}
int main()
{
cin >> n >> Q;
for(int i = 1; i <= n; i++)
for(int j = 1; j <= n; j++)
cin >> a[i][j];
for(int i = 1; i <= n; i++)
for(int j = 1; j <= n; j++)
RMQ[0][i][j] = a[i][j];
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++)
{
int i1 = i;
int j1 = j;
int i2 = i + (1 << (k - 1));
int j2 = j + (1 << (k - 1));
RMQ[k][i][j] = Maxim(RMQ[k - 1][i1][j1], RMQ[k - 1][i1][j2], RMQ[k - 1][i2][j1], RMQ[k - 1][i2][j2]);
}
for(int i = 2; i <= n; i++)
LOG[i] = LOG[i >> 1] + 1;
while(Q--)
{
int i, j, l;
cin >> i >> j >> l;
int k = LOG[l];
int i1 = i;
int j1 = j;
int i2 = i + l - 1;
int j2 = j + l - 1;
int answer = Maxim(RMQ[k][i1][j1], RMQ[k][i1][j2 - (1 << k) + 1], RMQ[k][i2 - (1 << k) + 1][j1], RMQ[k][i2 - (1 << k) + 1][j2 - (1 << k) + 1]);
cout << answer << '\n';
}
return 0;
}