Cod sursa(job #3206497)

Utilizator Darius1414Dobre Darius Adrian Darius1414 Data 23 februarie 2024 09:07:00
Problema Range minimum query Scor 60
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.68 kb
#include <iostream>
#include <fstream>
#include <cmath>
#define nmx 100005
using namespace std;
int n,a,b,m,v[nmx][17],lg[nmx],p2[20];
int main()
{
    ifstream f ("rmq.in");
    ofstream g ("rmq.out");
    f>>n>>m;
    p2[0]=1;
    for (int i=1;i<=17;i++)
        p2[i]=2*p2[i-1];
    for (int i=1;i<=n;i++)
        f>>v[i][0];
    for (int i=2;i<=nmx-5;i++)
        lg[i]=1+lg[i/2];
    for (int p=1;p<=16;p++)
        for (int i=1;i<=n-p+1;i++)
            v[i][p]=min(v[i][p-1],v[i+p2[p-1]][p-1]);
    for (int i=1;i<=m;i++)
    {
        f>>a>>b;
        if (b<a) swap(a,b);
        int sz=lg[b-a+1];
        g<<min(v[a][sz],v[b-p2[sz]+1][sz])<<'\n';
    }
}