Cod sursa(job #3036832)

Utilizator darian4444Verniceanu Darian darian4444 Data 25 martie 2023 10:32:08
Problema Range minimum query Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.8 kb
#include <bits/stdc++.h>

using namespace std;

int n,m,v[100000][17],a,b,i,j,p=2,k,mini=2147483648,lun,ult,nrp;

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

int main()
{
    fin >> n >> m;
    for (i = 1;i <= n;i++)
        fin >> v[0][i];
    for (i = 1;i <= 16;i++){nrp++;
        if (p > n)break;
        for (j = 1;j <= n-p+1;j++){mini=2147483647;
            if (v[i-1][j] < mini)mini=v[i-1][j];
            if (v[i-1][j+(p/2)] < mini)mini=v[i-1][j+(p/2)];
            v[i][j] = mini;
        }
        p*=2;
    }
    for (i = 1;i <= m;i++){
        fin >> a >> b;
        if (a > b)swap(a,b);
        lun = b-a+1;
        p=1;nrp=0;
        while (p <= lun){p*=2;nrp++;}
        p/=2;nrp--;
        fout << min(v[nrp][a],v[nrp][a+(lun-p)]) << " ";
    }
    return 0;
}