Cod sursa(job #1076602)

Utilizator bghimisFMI Ghimis Bogdan bghimis Data 10 ianuarie 2014 13:41:34
Problema Plantatie Scor 30
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.09 kb
#include <fstream>
#include <cmath>
using namespace std;

int d[501][501][501];
int ma[501][501];

int main()
{
  ifstream in ("plantatie.in");
  ofstream out("plantatie.out");

  int n, m; 
  in >> n >> m;

  for (int i = 1; i <= n; ++i)
    for (int j = 1; j <= n; ++j)
      {
	in >> ma[i][j];
	d[i][j][0] = ma[i][j];
      }

  for (int i = n; i >= 1; --i)
    {
      for (int j = n; j >= 1; --j)
	{
	  for (int k = 0; k < log2(n); ++k)
	  {
	    d[i][j][k] += max(d[i][j][k - 1], max(d[i][j + (1 << (k - 1))][k - 1], max(d[i + (1 << (k - 1))][j][k - 1], d[i + (1 << (k - 1))][j + (1 << (k - 1))][k - 1])));
	    //out << "d["<< i << "][" << j << "][" << (1 << k) << "] = " << d[i][j][k] << " ";
	  }
	  //out << "\n";
	}
      //out << "\n";
    }
 
  int q = m;
  for (int i = 1; i <= q; ++i)
    {
      int x, y, z; in >> x >> y >> z;

      int p = log2(z);
      int put = 1 << p;
      out << max(d[x][y][p], max(d[x][y + z - put][p], max(d[x + z - put][y][p], d[x + z - put][y + z - put][p]))) << "\n";
    }

  in .close();
  out.close();

  return 0;
}