Pagini recente » Cod sursa (job #361498) | Cod sursa (job #165613) | Cod sursa (job #312364) | Cod sursa (job #2580056) | Cod sursa (job #2743989)
#include <stdio.h>
#include <stdint.h>
void read_uint32_t(FILE *__restrict stream, uint32_t *__restrict nr) {
uint8_t ch;
*nr = 0;
while ((ch = fgetc(stream)) && ('0' <= ch && ch <= '9')) {
*nr *= 10;
*nr += ch - '0';
}
if (ch == '\r') {
fgetc(stream);
}
}
uint32_t n, q;
uint32_t a[501][501];
uint32_t l2[501];
uint32_t r[8][501][501];
uint32_t max4(uint32_t o1, uint32_t o2, uint32_t o3, uint32_t o4) {
o1 = o1 > o2 ? o1 : o2;
o1 = o1 > o3 ? o1 : o3;
return o1 > o4 ? o1 : o4;
}
void prep() {
l2[1] = 0;
uint32_t i, j, k, lat;
for (i = 2; i <= n; ++i) {
l2[i] = 1 + l2[i >> 1];
}
for (i = 1; i <= l2[n]; ++i) {
lat = (1 << (i - 1));
for (j = 1; j < n; ++j) {
if (lat <= j) {
for (k = 1; k < n; ++k) {
if (lat <= k) {
r[i][j][k] = max4(r[i - 1][j][k], r[i - 1][j - lat][k], r[i - 1][j][k - lat],
r[i - 1][j - lat][k - lat]);
}
}
}
}
}
}
uint32_t gmax(uint32_t l, uint32_t y, uint32_t x) {
uint32_t ll = l > 1 ? l2[l] - 1 : 0;
--l;
return max4(r[ll][y + l][x + l], r[ll][y][x + l], r[ll][y + l][x], r[ll][y][x]);
}
int main() {
{
FILE *__restrict in = fopen("plantatie.in", "r");
fscanf(in, "%u %u", &n, &q);
// read_uint32_t(in, &n);
// read_uint32_t(in, &q);
{
int32_t i, j;
for (i = 0; i < n; ++i) {
for (j = 0; j < n; ++j) {
fscanf(in, "%u", a[i]+ j);
// read_uint32_t(in, a[i] + j);
r[0][i][j] = a[i][j];
}
}
}
prep();
{
FILE *__restrict out = fopen("plantatie.out", "w");
int32_t i;
uint32_t l, y, x;
for (i = 0; i < q; ++i) {
fscanf(in, "%u %u %u", &y, &x, &l);
// read_uint32_t(in, &y);
// read_uint32_t(in, &x);
// read_uint32_t(in, &l);
fprintf(out, "%u\r\n", gmax(l, y - 1, x - 1));
}
fclose(out);
}
fclose(in);
}
return 0;
}