Cod sursa(job #170605)

Utilizator cretuMusina Rares cretu Data 2 aprilie 2008 22:37:46
Problema Plantatie Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.27 kb
#include <fstream>
#define MAX 501
#define maxi(a, b) ((a) > (b) ? (a) : (b))

using namespace std;

int a[MAX][MAX][10], val[MAX][MAX], lg[MAX];
int m, n;

int main()
{
    int i, j, k, x, y, p;
    
    ifstream fin("plantatie.in");
    fin >> n >> m;
    for (i = 1; i <= n; i++)    
        for (j = 1; j <= n; j++)
            fin >> val[i][j];
    
    lg[1] = 0;
    for (i = 2; i <= n; i++)
        lg[i] = lg[i/2] + 1;
        
    for (i = 1; i <= n; i++)
        for (j = 1; j <= n; j++)
            a[i][j][0] = val[i][j];
    
    for (k = 1; (1 << k) <= n; k++)
         for (i = 1; i + (1 << (k-1)) <= n; i++)
              for (j = 1; j + (1 << (k-1)) <= n; j++)
              {
                  x = i + (1 << (k-1));
                  y = j + (1 << (k-1));
                  a[i][j][k] = maxi(maxi(a[i][j][k-1], a[i][y][k-1]), maxi(a[x][j][k-1], a[x][y][k-1]));        
              }
    
    ofstream fout("plantatie.out");
    
    for (; m > 0; m--)
    {
        fin >> i >> j >> k;
        p = lg[k];
        x = i + k - (1 << p);
        y = j + k - (1 << p);
        fout << maxi(maxi(a[i][j][p], a[i][y][p]), maxi(a[x][j][p], a[x][y][p])) << "\n";    
    }
    
    fin.close();
    fout.close();
    
    return 0;
}