Cod sursa(job #1679113)

Utilizator filip.dutescuDutescu Filip Ioan filip.dutescu Data 7 aprilie 2016 18:13:42
Problema Plantatie Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.96 kb
#include <iostream>
#include <fstream>
using namespace std;
ifstream in("plantatie.in");
ofstream out("plantatie.out");
const int N = 505;
int n, m, a, b, v[N], r[N][18][18], log[N];

int maxi(int x, int y){
    return x > y ? x : y;
}

int maxi(int x, int y, int m, int n){
    return maxi(maxi(x, y), maxi(m, n));
}

int main() {
    in>>n>>m;
    for(int i = 1; i <= n; i++) {
        in>>v[i];
    }
    for(int i = 2; i <= n; i++)
        log[i]=1+log[i/2];

    for(int k = 1; k <= n; k++) {
        for(int i = 1; i <= n; i++) {
            r[i][0][0] = v[i];
            for(int j = 1; (1<<j) <= i; j++)
                r[i][j][k] = maxi(r[i][j][k-1], r[i][j-(1<<(k-1))][k-1], r[i-(1<<(k-1))][j][k-1], r[i-(1<<(k-1))][j-(1<<(k-1))][k-1]);
        }
    }

    int l;
    for(int i = 1; i <= m; i++) {
        in>>a>>b;
        l = log[b-a+1];
        out<<maxi(r[a][b][l], r[a][b+(1<<l)-1][l], r[a+(1<<l)-1][b][l], r[a+(1<<l)-1][b+(1<<l)-1][l])<<'\n';
    }
    return 0;
}