Pagini recente » Monitorul de evaluare | Cod sursa (job #3361388)
#include<iostream>
#include<fstream>
using namespace std;
#define NMAX 501
ifstream fin("plantatie.in");
ofstream fout("plantatie.out");
int n, q;
int rmq[10][NMAX][NMAX];
int Log2[NMAX];
int main()
{
fin >> n;
fin >> q;
Log2[1] = 0;
for (int i = 2; i<NMAX; i++) {
Log2[i] = Log2[i/2]+1;
}
for (int i = 1; i<=n; i++) {
for (int j = 1; j<=n; j++) {
fin >> rmq[0][i][j];
}
}
for (int p = 1; (1<<p)<=n; p++) {
for (int i = 1; i+(1<<p)-1<=n; i++) {
for (int j = 1; j+(1<<p)-1<=n; j++) {
rmq[p][i][j] = max(max(max(rmq[p-1][i][j], rmq[p-1][i+(1<<(p-1))][j]),
rmq[p-1][i][j+(1<<(p-1))]), rmq[p-1][i+(1<<(p-1))][j+(1<<(p-1))]);
}
}
}
while(q--) {
int lin, col, k;
fin >> lin >> col >> k;
int e = Log2[k];
fout << max(max(max(rmq[e][lin][col], rmq[e][lin+k-(1<<e)][col]), rmq[e][lin][col+k-(1<<e)]), rmq[e][lin+k-(1<<e)][col+k-(1<<e)]) << '\n';
}
return 0;
}