Cod sursa(job #3155129)

Utilizator Andreea3425Diaconu Andreea Andreea3425 Data 7 octombrie 2023 13:26:56
Problema Range minimum query Scor 10
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.79 kb
#include <fstream>

using namespace std;

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

#define MAX 100000

int sp[MAX][25], v[MAX], lg[MAX];

void rmq (int n)
{
    int i,j,k;
    for (i=0; i<n; i++)
        sp[i][0]=v[i];
    k=lg[n];
    for (j=1; j<=k; j++)
        for (i=0; (i+(1<<j))-1<n; i++)
            sp[i][j]=min(sp[i][j-1], sp[i+(1<<(j-1))][j-1]);
}

int que(int a, int b)
{
    int len,k;
    len=b-a+1;
    k=lg[b-a+1];
    return min(sp[a][k], sp[a+len-(1<<k)][k]);
}

int main()
{
    int n,i,q,a,b;
    cin >> n >> q;
    for (i=0; i<n; i++)
        cin >> v[i];
    for (i=2; i<=MAX; i++)
        lg[i]=1+lg[i/2];
    rmq(n);
    for (i=0; i<q; i++){
        cin >> a >> b;
        cout << que(a-1, b-1) << endl;
    }
    return 0;
}