Mai intai trebuie sa te autentifici.

Cod sursa(job #3366461)

Utilizator medeeavasile56@gmail.comVasile Medeea [email protected] Data 1 octombrie 2026 17:59:00
Problema Range minimum query Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.14 kb
// rmq propriu-zis
#include <fstream>
#include <vector>
#include <climits>
using namespace std;
ifstream cin("rmq.in");
ofstream cout("rmq.out");
const int NMAX=100005;
int a[NMAX][21];
// a[i][j] i-pozitia de inceput
// i+2^j-1 -pozitia de final
// a[i][j] -minimul pe interval

int n,queries;
vector<int> v,sol;

int power(int nr)
{
    int p=1;
    while(p*2<=nr) p*=2;
    return p;
}

int main()
{

    cin>>n>>queries;

    v.resize(n);

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

    for(int i=0;i<n;i++)
    for(int j=1;j<=20;j++) a[i][j]=INT_MAX;

    for(int i=0;i<n;i++)
    for(int j=1;j<=20;j++)
        if(i+(1<<j)<=n)
        a[i][j]=min(a[i][j-1],a[i+(1<<(j-1))][j-1]);

    for(int i=0;i<queries;i++){
        int left,right; cin>>left>>right; left--; right--;
        int p=power(right-left+1);
        int log=0;
        while(p>1){
            log++;
            p>>=1;
        }
        int min1=a[left][log];
        int min2=a[right-(1<<log)+1][log];
        sol.push_back(min(min1,min2));
    }

    for(int x:sol) cout<<x<<'\n';

    return 0;
}