Cod sursa(job #2292683)

Utilizator georgitTreista Georgiana georgit Data 29 noiembrie 2018 20:24:22
Problema Range minimum query Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.71 kb
#include <fstream>
#define N 100000

using namespace std;

int logaritm[N+5],a[N+5],RMQ[N+5][20];
int main()
{
    ifstream f("rmq.in");
    ofstream g("rmq.out");
    int n,Q;
    f>>n>>Q;
    for(int i=1;i<=n;i++)
    {
        f>>a[i];
        RMQ[i][0]=a[i];
    }
    for(int i=2;i<=n;i++)
        logaritm[i]=logaritm[i/2]+1;
    for(int j=1;(1<<j)<=n;j++)
        for(int i=1;i<=n+1-(1<<j);i++)
            RMQ[i][j]=min(RMQ[i][j-1],RMQ[i+(1<<(j-1))][j-1]);
    for(int q=1;q<=Q;q++)
    {
        int st,dr;
        f>>st>>dr;
        int dist=dr-st+1;
        int log=logaritm[dist];
        int d=dist-(1<<log);
        g<<min(RMQ[st][log],RMQ[st+d][log])<<"\n";
    }
    return 0;
}