Pagini recente » Cod sursa (job #2176718) | Cod sursa (job #2468867) | Cod sursa (job #1166702) | Cod sursa (job #2699352) | Cod sursa (job #2743986)
#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]);
}
//#define lat l2[l]
//
// return max4(r[l - 1][y + lat][x + lat], r[l - 1][l][x + lat], r[l - 1][y + lat][x],
// r[l - 1][y][x]);
//#undef lat
//}
int main() {
{
FILE *__restrict in = fopen("plantatie.in", "r");
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) {
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) {
read_uint32_t(in, &y);
read_uint32_t(in, &x);
read_uint32_t(in, &l);
fprintf(out, "%u\n", gmax(l, y - 1, x - 1));
}
fclose(out);
}
fclose(in);
}
return 0;
}