Cod sursa(job #2613722)

Utilizator stanbianca611Stan Bianca stanbianca611 Data 10 mai 2020 15:47:40
Problema Range minimum query Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.93 kb
#include <bits/stdc++.h>

using namespace std;
ifstream f ("rmq.in");
ofstream g ("rmq.out");
int m[100005][20];
int v[100005];
int n,q;
int main()
{
    f>>n>>q;
    for(int i=0; i<n; i++)
    {
        f>>v[i];
        m[0][i]=i;
    }
    int j=1;
    int log=log2(n);
    while(j<=log)
    {
        memset(m[j], -1, sizeof(m[j]));
        for(int i=0; i<n-j; i++)
        {
            if(v[m[j-1][i]]<v[m[j-1][i+(1<<(j-1))]])
                m[j][i]=m[j-1][i];
            else
                m[j][i]=m[j-1][i+(1<<(j-1))];
        }
        j++;
    }
    for(int i=0; i<q; i++)
    {
        int x, y;
        f>>x>>y;
        int l=log2(x-y+1);
        if(m[l][x-1]!=-1 && m[l][y-(1<<log)]!=-1)
            g<<min(v[m[l][x-1]], v[m[l][y-(1<<l)]])<<"\n";
        else if(m[l][x-1]!=-1)
            g<<v[m[l][x-1]]<<"\n";
        else
            g<<v[m[l][y-(1<<l)]]<<"\n";
    }
    return 0;
}