Cod sursa(job #1713691)

Utilizator SmitOanea Smit Andrei Smit Data 6 iunie 2016 10:35:35
Problema Range minimum query Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.81 kb
#include <bits/stdc++.h>

using namespace std;

int n,m,t[100003],a[100003][20],v[100003];

inline void ConstruireMatrice()
{
    int i,k;
    for(i=1;i<=n;++i)
        a[i][0]=t[i];
    for(k=1;(1<<k)<=n;++k)
        for(i=1;i<=n-(1<<k)+1;++i)
            a[i][k]=min(a[i][k-1],a[i+(1<<(k-1))][k-1]);
    v[1]=0;
    for(i=2;i<=n;++i)
        v[i]=v[i/2]+1;
}

inline void Citire()
{
    int i,x,y,L,k,sol;
    ifstream fin("rmq.in");
    ofstream fout("rmq.out");
    fin>>n>>m;
    for(i=1;i<=n;++i)
        fin>>t[i];
    ConstruireMatrice();
    for(i=1;i<=m;++i)
    {
        fin>>x>>y;
        L=y-x+1;
        k=v[L];
        sol=min(a[x][k],a[y-(1<<k)+1][k]);
        fout<<sol<<"\n";
    }
    fin.close();
    fout.close();
}

int main()
{
    Citire();
    return 0;
}