Pagini recente » Cod sursa (job #1149484) | Cod sursa (job #531391) | Cod sursa (job #2133019) | Cod sursa (job #162421) | Cod sursa (job #3130503)
#include <iostream>
#include <fstream>
#include <cmath>
#include <iomanip>
using namespace std;
int rmq[501][501][9], logg2[100003];
int max4(int a, int b, int c, int d){
a = a>b ? a : b;
c = c>d ? c : d;
return a>c ? a : c;
}
void populateRMQ(int n){
for(int j=1; pow(2, j) <= n; j++){
int p = pow(2, j-1);
for(int i=1; i + p*2 - 1 <= n; i++){
for(int k=1; k + p*2 - 1 <= n; k++){
rmq[i][k][j] = max4(rmq[i+p][k][j-1], rmq[i][k+p][j - 1], rmq[i+p][k+p][j-1], rmq[i][k][j - 1]);
}
}
}
}
int main(){
ifstream f("plantatie.in");
ofstream g("plantatie.out");
int n, m, a, b, c;
f>>n>>m;
logg2[1] = 0;
for(int i = 2; i <= n; i++)
logg2[i] = 1 + logg2[i / 2];
for(int i=1; i<=n; i++){
for(int j=1; j<=n; j++){
f>>rmq[i][j][0];
}
}
populateRMQ(n);
while(m>0) {
f >> a >> b >> c;
int k = logg2[c], p = pow(2, k);
g << max4(rmq[a][b][k], rmq[a][b - p + c][k], rmq[a - p + c][b][k], rmq[a - p + c][b - p + c][k])
<< endl;
m--;
}
f.close();
g.close();
return 0;
}