Cod sursa(job #2526406)

Utilizator ionicaion ionica Data 18 ianuarie 2020 16:17:09
Problema Range minimum query Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.68 kb
#include <fstream>

#define NM 100005
using namespace std;

ifstream fin("rmq.in");
ofstream fout("rmq.out");

int rmq[20][NM],n,m,lg2[NM];

int main()
{
    int n,i,j,k,y,w,x,z;


    fin >> n>>m;

    lg2[1]=0;
    for(i=2; i<=n; i++)
        lg2[i]=lg2[i/2]+1;

    for(int i = 1; i <= n; ++i)
        fin >>rmq[0][i];


    for(i = 1;  i<= lg2[n]; i++)
        for(j = 1; j+ (1<<i)-1<=n;j++)
            rmq[i][j]=min(rmq[i-1][j],rmq[i-1][j+(1<<(i-1))]);


   for(int i = 1; i <= m; ++i)
    {
        fin >> x >> y;

        z = y - x + 1;
        k=lg2[z];
        w=min(rmq[k][x],rmq[k][y-(1<<k)+1]);
         fout<<w<< '\n';
    }
    return 0;
}