Cod sursa(job #1498838)

Utilizator vasica38Vasile Catana vasica38 Data 9 octombrie 2015 14:38:25
Problema Range minimum query Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.71 kb
#include<fstream>
#define nmax 100010
using namespace std;

ifstream cin("rmq.in");
ofstream cout("rmq.out");

int n,k,t,a[nmax],m[nmax][30],i,j;

int main()
{
    int test;
    cin>>n>>test;
    for (i=1; i<=n; ++i) cin>>a[i];
    //precomputing
    for (i=1; i<=n; ++i) m[i][0]=i;
    for (j=1; (1<<j)<=n; ++j)
     for (i=1; i+(1<<j)-1<=n; ++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];
    while (test--)
    {
        int x,y;
        cin>>x>>y;
        int k=0;
        while ((1<<k)<=(y-x+1)) ++k; --k;
        cout<<min(a[m[x][k]],a[m[y-(1<<k)+1][k]])<<"\n";

    }
    return 0;
}