Cod sursa(job #2572211)

Utilizator CarlaDianaCarla Diana CarlaDiana Data 5 martie 2020 12:06:17
Problema Range minimum query Scor 20
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.47 kb
#include <iostream>
#include <fstream>
#include <cmath>
using namespace std;
ifstream fin ("rmq.in");
ofstream fout ("rmq.out");
int n,m,ma[100005][30],nto,j,maxx,a,b;

int minnim(int st,int dr)
{
    int dif=dr-st;
    int k=log2(dif);
    return(min(ma[st][k],ma[dr-(1<<k)+1][k]));
}


int main()
{
    fin>>n>>m;
    for(int i=1;i<=n;i++)
        fin>>ma[i][0];

    for(j=1;(1<<j)<=n;j++)
    {
        for(int i=1;i<=n-(1<<j)+1;i++)
        {
            ma[i][j]=min(ma[i][j-1],ma[i+((1<<(j-1)))][j-1]);
        }
    }
    maxx=j-1;
    for(;m;m--)
    {
        fin>>a>>b;
        if(a>b) swap(a,b);
        fout<<minnim(a,b)<<'\n';
    }

    return 0;
}














/*#include <iostream>
#include <fstream>
#include <cmath>
using namespace std;
ifstream fin ("rmq.in");
ofstream fout ("rmq.out");
int n,m,ma[100005][30],nto,j,maxx,a,b;

int minnim(int st,int dr)
{
    int dif=dr-st;
    int k=log2(dif);
    return(min(ma[st][k],ma[dr-(1<<k)+1][k]));
}


int main()
{
    fin>>n>>m;
    for(int i=1;i<=n;i++)
        fin>>ma[i][0];

    for(j=1;(1<<j)<=n;j++)
    {
        for(int i=1;i<=n-(1<<j)+1;i++)
        {
            ma[i][j]=min(ma[i][j-1],ma[i+((1<<(j-1)))][j-1]);
        }
    }
    maxx=j-1;
    for(;m;m--)
    {
        fin>>a>>b;
        if(a>b) swap(a,b);
        dif=dr-st+1;
        k=log2(dif);
        fout<<min(ma[st][k],ma[dr-(1<<k)+1][k])<<" ";
    }

    return 0;
}
*/