Pagini recente » Cod sursa (job #2490033) | Cod sursa (job #1432983) | Cod sursa (job #2047425) | Cod sursa (job #1712397) | Cod sursa (job #215965)
Cod sursa(job #215965)
#include <stdio.h>
#define NMAX 501
#define LOGMAX 8
#define max(a,b) (a) > (b) ? (a) : (b)
int Q[NMAX][NMAX][LOGMAX + 1],log2[NMAX],N,M; //LOLLLLLL unde era eroarea
void read()
{
freopen("plantatie.in","r",stdin);
scanf("%d%d",&N,&M);
for(int i = 1; i <= N; ++i)
for(int j = 1; j <= N ; ++j)
scanf("%d",&Q[i][j][0]);
}
void proc() //RMQ 2D O(N^2 log2N)
{
for(int i = 2; i <= N; ++i)
log2[i] = log2[i >> 1] + 1;
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) {
Q[i][j][k] = max(Q[i][j][k - 1],Q[i + (1<<(k-1))][j][k - 1]);
Q[i][j][k] = max(Q[i][j][k],Q[i][j + (1<<(k-1))][k - 1]);
Q[i][j][k] = max(Q[i][j][k],Q[i + (1<<(k-1))][j + (1<<(k-1))][k - 1]);
}
}
void query()
{
freopen("plantatie.out","w",stdout);
int i,j,k,maxx,dif;
while(M--) {
scanf("%d%d%d",&i,&j,&k);
dif = k - (1<<log2[k]);
maxx = max( max(Q[i][j][log2[k]],Q[i][j + dif][log2[k]]) ,
max(Q[i + dif][j][log2[k]],Q[i + dif][j +dif][log2[k]]) ) ;
printf("%d\n",maxx);
}
}
int main()
{
read();
proc();
query();
return 0;
}