Cod sursa(job #2621730)

Utilizator paulaiugaPaula Iuga paulaiuga Data 30 mai 2020 18:12:27
Problema Range minimum query Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.1 kb
#include <bits/stdc++.h>

using namespace std;

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

///RMQ = min din interv [x,y] cu sparse table;
int a[100002];
int rmq[18][100002];

int calculeaza_putere(int p)
{
    int x = 2;

    while(p-1)
    {
        x*=2;
        p--;
    }

    return x;

}
int main()
{
    int n, m,x,y;
    in>>n>>m;


    for(int i = 0; i<n; i++)
    {
        in>>a[i];
    }


    for (int i = 0; i<n; i++)
        rmq[i][0] = a[i];


// for(int i = 0; i<n ;i++)
// {
//     cout<<a[i];
// }

    int log[100002];
    log[1] = 0;
    for (int i = 2; i <= 100002; i++)
        log[i] = log[i/2] + 1;


    for (int j = 1; j <= n; j++)
    {
        int w = calculeaza_putere(j);
        //cout<<w<<" ";
        for (int i = 0; i + w <= n; i++)
            rmq[i][j] = min(rmq[i][j-1], rmq[i + w/2][j - 1]);
    }

int j;
while(m)
{
    in>>x>>y;

   j = log[y - x + 1];
int minimum = min(rmq[x][j], rmq[y - calculeaza_putere(j) + 1][j]);
cout<<minimum<<"\n";
m--;
}



    in.close();
    out.close();


    return 0;
}