Cod sursa(job #750704)

Utilizator memaxMaxim Smith memax Data 22 mai 2012 21:26:56
Problema Range minimum query Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.01 kb
#include <iostream>
#include <fstream>
#include <vector>
#include <cmath>
using namespace std;

#define min(a,b) a<b?a:b

int main(){
    const int inf=1<<30;
    ofstream cour ("rmq.out");
    ifstream cinr ("rmq.in");
    int n1,n,m; 
    cinr >> n1; cinr >> m;
    n=1<<int(log(n1-1)/log(2)+1);
    vector<int> v(2*n, inf);
    for(int i=n; i<n+n1; i++){ cinr >> v[i]; }
    //preprocessing:
    for(int i=n-1; i>0; i--){ 
            v[i]=min(v[2*i], v[2*i+1]);
            }
    //cautare:
    int l,r,a;
    for(int i=1; i<=m; i++){
            cinr >> l; cinr >> r;
            l+=n-1; r+=n-1;
            a=inf;
            while(l<=r){
                        if(l%2==1){ a=min(a, v[l]); }                      
                        if(r%2==0){ a=min(a, v[r]); }
                        l=(l+1)/2;
                        r=(r-1)/2;
                        }
            cour << a << "\n";
            }
    cinr.close();
    cour.close();
    //cin.ignore(2);
    return 0;
    }