Cod sursa(job #3248892)

Utilizator Luca_Miscocilucainfoarena Luca_Miscoci Data 13 octombrie 2024 17:39:10
Problema Plantatie Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.03 kb
#include <fstream>

using namespace std;

const int nmax = 500;
const int log = 17;

int rmq[log][nmax + 1][nmax + 1];
int logg[nmax + 1];

void prec (int n){
  for (int i = 1; i <= n; i++){
    logg[i] = logg[i / 2] + 1;
  }
}

int main(){

  ifstream fin ("plantatie.in");
  ofstream fout ("plantatie.out");

  int n, m;
  fin >> n >> m;

  for (int i = 1; i <= n; i++){
    for (int j = 1; j <= n; j++)
      fin >> rmq[0][i][j];
  }

  prec(n);
  for (int k = 1; k <= logg[n]; k++){
    int bit = (1 << (k - 1));
    for (int i = 1; i <= n - bit; i++)
      for (int j = 1; j <= n - bit; j++)
        rmq[k][i][j] = max (max (rmq[k - 1][i][j], rmq[k - 1][i + bit][j]), max(rmq[k - 1][i][j + bit], rmq[k - 1][i + bit][j + bit]));
  }

  while (m --){
    int x, y, k;
    fin >> x >> y >> k;
    int dr = (1 << (logg[k] - 1));
    int lg = logg[k] - 1;
    fout << max ( max (rmq[lg][x][y], rmq[lg][x + k - dr][y]), max (rmq[lg][x][y + k - dr], rmq[lg][x + k - dr][y + k - dr])) << "\n";
  }
  return 0;
}