Cod sursa(job #1216352)

Utilizator MaarcellKurt Godel Maarcell Data 4 august 2014 11:27:44
Problema Range minimum query Scor 90
Compilator cpp Status done
Runda Arhiva educationala Marime 0.94 kb
#include <iostream>
#include <stdio.h>
using namespace std;

int N,M,segtree[1000000],a[100000],ql,qr,MIN;

void build_tree(int nod, int l, int r){
    if (l==r){
        segtree[nod]=a[l];
        return;
    }

    int mid=(l+r)/2;
    build_tree(nod*2,l,mid);
    build_tree(nod*2+1,mid+1,r);
    segtree[nod]=min(segtree[nod*2],segtree[nod*2+1]);
}

void query(int nod, int l, int r){
    if (ql<=l && r<=qr){
        MIN=min(MIN,segtree[nod]);
        return;
    }

    int mid=(l+r)/2;
    if (ql<=mid) query(nod*2,l,mid);
    if (mid<qr) query(nod*2+1,mid+1,r);
}
int main(){
    freopen("rmq.in","r",stdin);
    freopen("rmq.out","w",stdout);
    scanf("%d %d\n",&N,&M);

    int i;
    for (i=1; i<=N; i++)
        scanf("%d",&a[i]);

    build_tree(1,1,N);

    for (i=1; i<=M; i++){
        scanf("%d %d",&ql,&qr);
        MIN=1000000;
        query(1,1,N);
        printf("%d\n",MIN);
    }
    return 0;
}