Cod sursa(job #2591331)

Utilizator gruhtenZinnenberg Gruhten gruhten Data 30 martie 2020 12:46:19
Problema Range minimum query Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.78 kb
#include <bits/stdc++.h>

using namespace std;
ifstream f("rmq.in");
ofstream g("rmq.out");

const int Nmax=100004 ;

int N,M,i,j,k,x,y,Log2[Nmax];
int RMQ[18][Nmax];


void Get_RMQ()
{
    for(i=1;(1<<i)<=N;i++)
    {
        int k=(1<<i)-1;
        int v=1<<(i-1);
        for(j=1;j+k<=N;j++)
        {
            RMQ[i][j]=min(RMQ[i-1][j],RMQ[i-1][j+v]);
        }
    }
}


void Query(int X,int Y)
{
    if(X>Y)
        swap(X,Y);

    int K=Log2[Y-X+1];

    g<<min(RMQ[K][X],RMQ[K][Y-(1<<K)+1])<<"\n";
}



int main()
{
    f>>N>>M;
    for(i=1;i<=N;i++)
        f>>RMQ[0][i];

    for(i=2;i<=N;i++)
        Log2[i]=Log2[i/2]+1;

    Get_RMQ();


    while(M--)
    {
        f>>x>>y;
        Query(x,y);
    }


    return 0;
}