Cod sursa(job #2203715)

Utilizator Vlad_lsc2008Lungu Vlad Vlad_lsc2008 Data 12 mai 2018 22:28:12
Problema Range minimum query Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.81 kb
#include<fstream>
#include<iostream>
using namespace std;

int n,m;
int put[20];
int rmq[100010][20],lg[100010];

int main()
{
    ifstream t1("rmq.in");
    ofstream t2("rmq.out");
    int i,j;
    t1>>n>>m;
    put[0]=1;
    for(i=1;i<=20;i++)
        put[i]=2*put[i-1];
    lg[1]=0;
    for(i=2;i<=n;i++) lg[i]=lg[i/2]+1;
    for(i=1;i<=n;i++)
        t1>>rmq[i][0];
    for(j=1;put[j]<=n;j++)
        for(i=1;i + put[j]-1<=n;i++)
            rmq[i][j]=min( rmq[i+put[j-1]][j-1],rmq[i][j-1]);

    /*for(i=0;i<=10;i++)
    {
        for(j=0;j<=10;j++) cout<<rmq[i][j]<<' '; cout<<'\n';
    }*/
    int a,b,l;
    for(i=1;i<=m;i++)
    {
        t1>>a>>b;
        l=lg[b-a+1];
        //cout<<a<<' '<<b<<' '<<l<<'\n';
        t2<<min( rmq[a][l], rmq[b-l+1][l] )<<'\n';;
    }
    return 0;
}