Cod sursa(job #2048693)

Utilizator patcasrarespatcas rares danut patcasrares Data 26 octombrie 2017 14:57:06
Problema Range minimum query Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.88 kb
#include<fstream>
#define DN 100005
#include<iostream>
using namespace std;
ifstream fin("rmq.in");
ofstream fout("rmq.out");
int n,m,x,y,r[35][DN],a[DN],mi=(1<<28);
int main()
{
    fin>>n>>m;
    for(int i=1;i<=n;i++)
    {
        fin>>a[i];
        r[0][i]=a[i];
    }
    for(int j=1;j<=17;j++)
    for(int i=1;i<=n;i++)
        if(i+(1<<(j-1))<=n)
    {
       // cout<<j<<' '<<i<<' '<<i+(1<<(j-1))<<'\n';
        r[j][i]=min(r[j-1][i],r[j-1][i+(1<<(j-1))]);
    }
    for(int i=1;i<=m;i++)
    {
        fin>>x>>y;
        mi=(1<<28);
        for(int j=17;j>=0&&x<y;j--)
            if(r[j][x])
        {//cout<<i<<' '<<x<<' '<<x+(1<<j)-1<<' ';
            if(x+(1<<j)-1<=y)
            {
                mi=min(mi,min(r[j][x],a[x+(1<<j)]));
                x+=(1<<j);
            }
            //cout<<mi<<'\n';
        }
        fout<<mi<<'\n';
    }
}