Cod sursa(job #1004190)

Utilizator sorin_olimpicoolSorin Olimpicu sorin_olimpicool Data 2 octombrie 2013 11:42:36
Problema Plantatie Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.9 kb
#include <fstream>
#include <iostream>
#include <deque>
using namespace std;

int max4(int i, int i0, int i1, int i2) {
        if ((i >= i0) && (i >= i1) && (i >= i2)) {
            return i;
        }
        if ((i0 >= i) && (i0 >= i1) && (i0 >= i2)) {
            return i0;
        }
        if ((i1 >= i) && (i1 >= i0) && (i1 >= i2)) {
            return i1;
        }
        if ((i2 >= i) && (i2 >= i1) && (i2 >= i0)) {
            return i2;
        }
        return i;
    }
    
int main()
{  
    int n = 5, m = 4, i = 0, j = 0, xx = 0, yy = 0, loga = 0, k = 0, len = 0, nr = 0;
    int[300][501][501] din;
    int[1000] vlog;
    ifstream in("plantatie.in");
    ofstream out("plantatie.out");    
    int sizemin=0;    
    int sizemax=0;
    in>>n>>m;
           
    for (i = 1; i <= n; ++i) {
        for (j = 1; j <= n; ++j) {
            in>>din[0][i][j];
        }
    }
       for (k = 1; (1 << k) <= n; k++) {
            for (i = 1; i <= n - (1 << k) + 1; i++) {
                for (j = 1; j <= n - (1 << k) + 1; j++) {                    
                        din[k][i][j] = max4(
                        din[k - 1][i][j], 
                        din[k - 1][i][j + (1 << (k - 1))], 
                        din[k - 1][i + (1 << (k - 1))][j],
                        din[k - 1][i + (1 << (k - 1))][j + (1 << (k - 1))]);
                    
                }
            }
        }
        vlog[1] = 0;
        for (i = 2; i <= n ; i++) {
            vlog[i] = vlog[i >> 1] + 1;
        }
        for (i = 1; i <= m; i++) {
            in>>xx>>yy>>len;
            loga = vlog[len];
            nr = len - (1 << loga);
            int minimum = max4(din[loga][xx ][yy], din[loga][xx + nr][yy], din[loga][xx][yy + nr], din[loga][xx + nr][yy + nr]);
            out<<minimum<<"\n";
        }
   
    in.close();
    out.close();
 
    return 0;

    }