Pagini recente » Cod sursa (job #919336) | Cod sursa (job #670867) | Cod sursa (job #1349594) | Cod sursa (job #551965) | Cod sursa (job #108993)
Cod sursa(job #108993)
#include<cstdio>
#include<cmath>
using namespace std;
int a[500][500];
int b[500][500][10];
int n, m, k;
int max(int x, int y)
{
if(x<y)
return y;
return x;
}
int ppow(int a, int b)
{
return (int) pow(a*1.0, b);
}
int main()
{
freopen("plantatie.in", "r", stdin);
freopen("plantatie.out", "w", stdout);
//int n, m,
scanf("%d %d", &n, &m);
int i, j, y;
for(i=1; i<=n; i++)
for(j=1; j<=n; j++)
{scanf("%d", &y);
a[i][j] = y;
b[i][j][0] = a[i][j];
}
for(k=1; k<10; k++)
for(i=1; i<=n; i++)
for(j=1; j<=n; j++)
{
b[i][j][k] = b[i][j][k-1];
b[i][j][k] = max(b[i][j][k], b[i][j+ppow(2, k-1)][k-1]);
b[i][j][k] = max(b[i][j][k], b[i+ppow(2, k-1)][j][k-1]);
b[i][j][k] = max(b[i][j][k], b[i+ppow(2, k-1)][j+ppow(2, k-1)][k-1]);
}
int x, p;
for(x=0; x<m; x++)
{scanf("%d %d %d", &i, &j, &k);
p=0;
while(ppow(2, p) < k)
p++;
p--;
printf("%d\n", max(max(b[i][j][p], b[i][j+k-ppow(2, p)][p]),
max(b[i+k-ppow(2, p)][j][p], b[i+k-ppow(2,p)][j+k-ppow(2,p)][p] ) ));
}
return 0;
}