Cod sursa(job #2345040)

Utilizator raxman01Sicoe Raul Ioan raxman01 Data 15 februarie 2019 20:22:07
Problema Range minimum query Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.13 kb
#include <fstream>
#include <vector>
#include <cmath>
#define nmax 100002

using namespace std;

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

vector <int> v[nmax],p;

int n,m,x,y,mini;

inline void citire ()
{
    fin>>n>>m;
    for (int i=1;i<=n;i++)
    {
        fin>>x;
        v[0].push_back(x);
    }
}
inline void creare ()
{
    x=2;
    int c=0;
    while (n>=x)
    {
        c++;
        for (int i=0;i<=n-x;i++)
        {
            mini=v[0][i];
            for (int j=i+1;j<=i+x-1;j++)
                if (v[0][j]<mini)
                    mini=v[0][j];
            v[c].push_back(mini);
        }
        p.push_back(x);
        x=x*2;
    }
}
inline void rezolvare ()
{
    int d,j=0;
    for (int i=1;i<=m;i++)
    {
        j=0;
        fin>>x>>y;
        d=y-x+1;
        while (d<p[j])
            j++;
        j++;
        if (v[j][x-1]>v[j][y-p[j-1]]&&v[j][y-p[j-1]]!=0)
            mini=v[j][y-p[j-1]];
        else
            mini=v[j][x-1];
        fout<<mini<<"\n";
    }
}
int main()
{
    citire();
    creare();
    rezolvare ();
    return 0;
}