Cod sursa(job #2376787)

Utilizator PaulRPFRebenciuc Paul-Florin PaulRPF Data 8 martie 2019 17:39:50
Problema Range minimum query Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.6 kb
#include <bits/stdc++.h>
#define Nmax 100005
using namespace std;
ifstream f("rmq.in");
ofstream g("rmq.out");
int N,M,i,j,x,y,Log2[Nmax];
int RMQ[18][Nmax];

void Get_RMQ()
{
    for(i=1;(1<<i)<=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))]);
}

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;
}