Cod sursa(job #1749709)

Utilizator alittlezzCazaciuc Valentin alittlezz Data 28 august 2016 16:46:54
Problema Range minimum query Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.07 kb
#include <cstdio>

using namespace std;
const int N = 1e5 + 5;
int aib[2*N], n;

inline int max(int a, int b){
    return a < b ? a : b;
}

void build(){
    int i;
    for(i = n-1;i >= 1;i--){
        aib[i] = max(aib[i<<1], aib[(i<<1)+1]);
    }
}

void change(int p, int x){
    p += n-1;
    aib[p] = x;
    int i;
    for(i = p>>1;i >= 1;i >>= 1){
        aib[i] = max(aib[i<<1], aib[(i<<1)+1]);
    }
}

int query(int l, int r){
    l += n-1;
    r += n-1;
    int ret = 1e9;
    for(;l <= r;l >>= 1, r >>= 1){
        if(l&1){
            ret = max(ret, aib[l]);
            l++;
        }
        if((r&1) == 0){
            ret = max(ret, aib[r]);
            r--;
        }
    }
    return ret;

}

int main(){
    freopen("rmq.in", "r", stdin);
    freopen("rmq.out", "w", stdout);
    int i,j,m,p,x;
    scanf("%d %d", &n, &m);
    for(i = 0;i < n;i++){
        scanf("%d", &aib[i+n]);
    }
    build();
    for(i = 1;i <= m;i++){
        scanf("%d %d", &p, &x);
        printf("%d\n", query(p, x));
    }
    return 0;
}