Pagini recente » Cod sursa (job #3033234) | Cod sursa (job #1037008) | Cod sursa (job #2733265) | Cod sursa (job #342264) | Cod sursa (job #1046483)
#include <stdio.h>
#include <iostream>
#include <string>
#include <stdlib.h>
#include <assert.h>
#include <time.h>
#include <algorithm>
#include <vector>
#include <cstdio>
#include <cstring>
#include <fstream>
#include <queue>
#include <cstdlib>
#include <iomanip>
#include <cmath>
using namespace std;
#define NMAX 501
int plant[10][NMAX][NMAX], maximPow[NMAX];
int max (int a, int b)
{
return (a > b ? a : b);
}
int maxim (int a, int b, int c)
{
int maxCurent = max (a, b);
return ( max (maxCurent, c) );
}
void calcMaximPow ()
{
maximPow[1] = 0;
for (int i = 2; i < NMAX; i++)
{
maximPow[i] = maximPow[i/2] + 1;
}
}
int main ()
{
int N, M, x, y, l;
FILE *f = fopen ("plantatie.in", "r");
FILE *g = fopen ("plantatie.out", "w");
calcMaximPow();
char *d;
fscanf (f, "%d %d", &N, &M);
for (int i = 1; i <= N; i++)
{
for (int j = 1; j <= N; j++)
{
fscanf (f, "%d", &plant[0][i][j]);
}
}
int lenght = maximPow[N];
for (int p = 1; p <= lenght; p++)
{
for (int i = 1; i + ( 1<<(p - 1) ) <= N; i++)
{
for (int j = 1; j + ( 1<<(p - 1) ) <= N; j++)
{
plant[p][i][j] = max (plant[p - 1][i][j], plant[p - 1][i][j + (1<<(p - 1))]);
plant[p][i][j] = max (plant[p][i][j], plant[p - 1][i + (1<<(p - 1))][j]);
plant[p][i][j] = max (plant[p][i][j], plant[p - 1][i + (1 << (p - 1))][j + (1 << ( p - 1 ))]);
}
}
}
for (int i = 0; i < M; i++)
{
fscanf (f, "%d %d %d", &x, &y, &l);
int powl = maximPow[l];
int result1 = max (plant[powl][x][y], plant[powl][x][y + l - (1<<powl)]);
result1 = max (result1, plant[powl][x + l - (1<<powl)][y]);
fprintf(g, "%d\n", max ( plant[powl][x + l - (1<<powl)][y + l - (1<<powl)], result1 ));
}
fclose(f);
fclose(g);
return 0;
}