Pagini recente » Cod sursa (job #3288042) | Cod sursa (job #3302037) | Cod sursa (job #954854) | Cod sursa (job #379034) | Cod sursa (job #3301731)
#include <iostream>
#include <bits/stdc++.h>
using namespace std;
ifstream fin("plantatie.in");
ofstream fout("plantatie.out");
int rmq[9][501][501];
int A[501][501];
int main() {
int n,q;
fin>>n>>q;
for(int i=0; i<n; i++)
for(int j=0; j<n; j++)
fin>>A[i][j];
/**
for (int i = 0; i < n; i++)
for (int j = 0; j < n; j++)
rmq[0][0][i][j] = A[i][j];
for (int ky = 1; ky < 9; ky++) {
for (int i = 0; i < n; i++) {
for (int j = 0; j + (1<<ky) <= n; j++) {
rmq[0][ky][i][j] = max(rmq[0][ky-1][i][j], rmq[0][ky-1][i][j + (1<<(ky-1))]);
}
}
}
for (int kx = 1; kx < 9; kx++) {
for (int ky = 0; ky < 9; ky++) {
for (int i = 0; i + (1<<kx) <= n; i++) {
for (int j = 0; j + (1<<ky) <= n; j++) {
rmq[kx][ky][i][j] = max(rmq[kx-1][ky][i][j],rmq[kx-1][ky][i + (1<<(kx-1))][j]);
}
}
}
}
*/
for(int i=0; i<n; i++)
for(int j=0; j<n; j++)
rmq[0][i][j] = A[i][j];
for(int k=1; k<9; k++) {
int ll = 1<<(k-1);
for(int i=0; i + (1<<k) <= n; i++) {
for(int j=0; j + (1<<k) <= n; j++) {
int a = rmq[k-1][i][j];
int b = rmq[k-1][i+ll][j];
int c = rmq[k-1][i][j+ll];
int d = rmq[k-1][i+ll][j+ll];
rmq[k][i][j] = max( max(a,b), max(c,d) );
}
}
}
int lg[502];
lg[1] = 0;
for(int i = 2; i <= n; i++)
lg[i] = lg[i/2] + 1;
/**
while(q--) {
int x1,y1,ll;
fin>>x1>>y1>>ll;
x1--;
y1--;
int k = lg[ll];
int x2 = x1 + ll - (1<<k);
int y2 = y1 + ll - (1<<k);
int m1 = max(rmq[k][k][x1][y1], rmq[k][k][x1][y2]);
int m2 = max(rmq[k][k][x2][y1], rmq[k][k][x2][y2]);
fout << max(m1, m2) << "\n";
}
*/
while(q--) {
int x1,y1,l;
fin>>x1>>y1>>l;
x1--;
y1--;
int k = lg[l];
int ll = l - (1<<k);
int i0 = x1, j0 = y1;
int i1 = x1 + ll, j1 = y1 + ll;
int m1 = max(rmq[k][i0][j0], rmq[k][i0][j1]);
int m2 = max(rmq[k][i1][j0], rmq[k][i1][j1]);
fout << max(m1,m2)<<'\n';
}
return 0;
}