Cod sursa(job #2164743)

Utilizator catalina200029Olteanu Catalina catalina200029 Data 13 martie 2018 09:34:39
Problema Range minimum query Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.72 kb
#include <bits/stdc++.h>

using namespace std;

ifstream f("rmq.in");
ofstream g("rmq.out");

int n,mm,m[100005][20],a[100005];

int interog(int x,int y) {
    int k=log2(y-x+1);
    if (a[m[x][k]]<a[m[y-(1<<k)+1][k]])
        return a[m[x][k]];
    return a[m[y-(1<<k)+1][k]];
}

int main() {
    int i,j,x,y;
    f>>n>>mm;
    for (i=1;i<=n;i++) {
        f>>a[i];
        m[i][0]=i;
    }
    for (j=1;(1<<j)<=n;j++)
        for (i=1;i<=n-(1<<j)+1;i++)
            if (a[m[i][j-1]]<a[m[i+(1<<(j-1))][j-1]])
                m[i][j]=m[i][j-1];
            else
                m[i][j]=m[i+(1<<(j-1))][j-1];
    for (i=1;i<=mm;i++) {
        f>>x>>y;
        g<<interog(x,y)<<'\n';
    }
    return 0;
}