Pagini recente » Cod sursa (job #3133340) | Cod sursa (job #2583648) | Cod sursa (job #1087816) | Cod sursa (job #1633806) | Cod sursa (job #175315)
Cod sursa(job #175315)
#include <cstdio>
#include <fstream>
#include <iostream>
#define DIM 550
using namespace std;
int N, M, A[DIM][DIM], x, y, k, log[DIM], rmq[20][DIM][DIM];
int max(int a, int b, int c, int d)
{
if (a > b && a > c && a > d) return a;
if (b > a && b > c && b > d) return b;
if (c > a && c > b && c > d) return c;
return d;
}
int main()
{
FILE *fin = fopen("plantatie.in", "r");
FILE *fout = fopen("plantatie.out", "w");
fscanf(fin, "%d%d", &N, &M);
//cout << N << " " << M; cin.get();
int XX, YY;
for (int i = 1; i <= N; i++)
for (int j = 1; j <= N; j++)
{
fscanf(fin, "%d", &A[i][j]);
//cout << i << " " << j << " " << A[i][j] << " " << XX << " " << YY; cin.get();
rmq[0][i][j] = A[i][j];
}
for (int i = 2; i <= N; i++)
log[i] = log[i / 2] + 1;
for (int t = 1; (1 << t) <= N; t++)
for (int i = 1; i <= N - (1 << t) + 1; i++)
for (int j = 1; j <= N - (1 << t) + 1; j++)
{
int a = i + (1 << (t - 1));
int b = j + (1 << (t - 1));
rmq[t][i][j] = max(rmq[t - 1][i][j], rmq[t - 1][a][j], rmq[t - 1][i][b], rmq[t - 1][a][b]);
}
/* for (int i = 1; i <= N; i++)
{
for (int j = 1; j <= N; j++)
cout << A[i][j] << " ";
cout << "\n";
}
cin.get(); */
for (int i = 1; i <= M; i++)
{
fscanf(fin, "%d%d%d", &x, &y, &k);
//cout << M << " " << x << " " << y << " " << k; cin.get();
int lg = log[k];
int a = x + k - (1 << lg);
int b = y + k - (1 << lg);
//cout << rmq[]; cin.get();
fprintf(fout, "%d\n", max(rmq[lg][x][y], rmq[lg][a][y], rmq[lg][x][b], rmq[lg][a][b]));
}
fclose(fin);
fclose(fout);
return 0;
}