Cod sursa(job #2447428)

Utilizator Stefan_PiscuPiscu Stefan Constantin Stefan_Piscu Data 13 august 2019 12:55:04
Problema Range minimum query Scor 20
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.83 kb
#include <fstream>
using namespace std;

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

int n, m, v[100003][50], log[100003], a[1001];

int main()
{
    fin>>n>>m;
    for(int i=1;i<=n;++i)
    {
        fin>>a[i];
        v[i][0]=i;
        //fout<<i<<" "<<i<<" "<<v[i][0]<<"\n";
    }
     for(int i=2;i<=n;++i)
    {
        log[i]=log[i/2]+1;
    }
    for(int j=1;j<=log[n];++j)
        for(int i=1;i<=n;++i)
        {
            if(a[v[i][j-1]]<a[v[i+(1<<(j-1))][j-1]]) v[i][j]=v[i][j-1];
            else v[i][j]=v[i+(1<<(j-1))][j-1];
            //fout<<i<<" "<<i+(1<<j)-1<<" "<<v[i][j]<<" "<<v[v[i][j]][0]<<"\n";
        }
    for(int i=1;i<=m;++i)
    {
        int x, y;
        fin>>x>>y;
        int k=log[y-x+1];
        fout<<min(a[v[x][k]], a[v[y-(1<<k)+1][k]])<<"\n";
    }
    return 0;
}