Cod sursa(job #2611638)

Utilizator betybety bety bety Data 7 mai 2020 11:25:29
Problema Range minimum query Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.68 kb
#include <fstream>
using namespace std;
ifstream cin("rmq.in");
ofstream cout("rmq.out");
const int lim=1e5+3;
const int lgm=18;
int tree[lgm][lim];
int lg[lim];
void init()
{
    for(int i=1;(1<<i)<lim;++i)
        lg[(1<<i)]++;
    for(int i=1;i<=lim;++i)
        lg[i]+=lg[i-1];
}
int main()
{
    init();
    int n,m,x,y;
    cin>>n>>m;
    for(int i=1;i<=n;++i)
        cin>>x,tree[0][i]=x;
    for(int p=1;(1<<p)<=n;++p)
    for(int i=1;i+(1<<p)<=n+1;++i)
        tree[p][i]=min(tree[p-1][i],tree[p-1][i+(1<<(p-1))]);
    while(m--)
    {
        cin>>x>>y;
        int d=lg[y-x+1];
        cout<<min(tree[d][x],tree[d][y-(1<<d)+1])<<'\n';
    }
    return 0;
}