Cod sursa(job #2164826)

Utilizator alexandruilieAlex Ilie alexandruilie Data 13 martie 2018 09:58:02
Problema Range minimum query Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.69 kb
#include <fstream>
#define nmax 100001
#define inf 2e9
#include <cmath>
using namespace std;
ifstream f("rmq.in");
ofstream g("rmq.out");
int n,m1,v[nmax],i,m[nmax][20],l,lg,mn,nr,j,x,y,diff;
int main()
{
    f>>n>>m1;
    for(i=1;i<=n;i++) f>>v[i];
    for(i=1;i<=n;i++) m[i][0]=i;
    for(j=1;(1<<j)<=n;j++)
        for(i=1;i<=n-(1<<j)+1;i++)
        if(v[m[i][j-1]]<v[m[i+(1<<(j-1))][j-1]]) m[i][j]=m[i][j-1];
        else m[i][j]=m[i+(1<<(j-1))][j-1];
    for(i=1;i<=m1;i++)
    {
        f>>x>>y;
        diff=y-x+1;
        l=(int)log2(diff);
        if(v[m[x][l]]<v[m[x+(1<<(l-1))][l]]) g<<v[m[x][l]]<<'\n';
        else g<<v[m[x+(1<<(l-1))][l]]<<'\n';

    }
    return 0;
}