Pagini recente » Cod sursa (job #672993) | Cod sursa (job #784109) | Cod sursa (job #691361) | Cod sursa (job #739492) | Cod sursa (job #837795)
Cod sursa(job #837795)
#include<cstdio>
#include<algorithm>
using namespace std;
#define Lmax 10
#define Nmax 512
int rmq[Lmax][Nmax][Nmax], log[Nmax], N, M;
int maxim(int a, int b, int c, int d) {
return max(a, max(b, max(c, d)));
}
int main() {
freopen("plantatie.in","r",stdin);
freopen("plantatie.out","w",stdout);
int a, b, c, d, i, j, k, poz, rez;
scanf("%d %d",&N,&M);
for(i=1; i<=N; ++i)
for(j=1; j<=N; ++j)
scanf("%d",&rmq[0][i][j]);
for(i=2; i<=N; ++i)
log[i] = log[i/2]+1;
for(k=1; (1<<k)<=N; ++k)
for(i=1; i+(1<<k)-1<=N; ++i)
for(j=1; j+(1<<k)-1<=N; ++j) {
a = rmq[k-1][i][j];
b = rmq[k-1][i+(1<<(k-1))][j];
c = rmq[k-1][i][j+(1<<(k-1))];
d = rmq[k-1][i+(1<<(k-1))][j+(1<<(k-1))];
rmq[k][i][j] = maxim(a, b, c, d);
}
while(M--) {
scanf("%d %d %d",&i,&j,&k);
poz = log[k];
a = rmq[poz][i][j];
b = rmq[poz][i-(1<<poz)+k][j];
c = rmq[poz][i][j-(1<<poz)+k];
d = rmq[poz][i-(1<<poz)+k][j-(1<<poz)+k];
rez = maxim(a, b, c, d);
printf("%d\n",rez);
}
return 0;
}