Cod sursa(job #2812102)

Utilizator StefantimStefan Timisescu Stefantim Data 3 decembrie 2021 22:39:06
Problema Range minimum query Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.74 kb
#include <fstream>
#include <algorithm>
using namespace std;
ifstream fin("rmq.in");
ofstream fout("rmq.out");
const int NMAX = 100000;
int v[NMAX+5];
int rmq[NMAX+5][20];
int log[NMAX+5];
int main()
{
    int x, y, n, m, i, j, lg;
    fin>>n>>m;
    for(i=1;i<=NMAX;i++)
    {
        log[i]=log[i/2]+1;
    }
    for(i=1;i<=n;i++)
        fin>>v[i];
    for(i=1;i<=n;i++)
        rmq[i][0]=v[i];
    for (j=1; (1 << j) <=n;j++)
    {
		for (i=0;i + (1 << j) - 1 <= n;i++)
        {
            rmq[i][j]=min(rmq[i][j-1],rmq[i+(1<<(j-1))][j-1]);
        }
    }
    for(i=1;i<=m;i++)
    {
        fin>>x>>y;
        lg = log[y-x+1]-1;
        fout<<min(rmq[x][lg],rmq[y+1-(1<<lg)][lg])<<"\n";
    }
    return 0;
}