Cod sursa(job #1714873)

Utilizator SmitOanea Smit Andrei Smit Data 9 iunie 2016 16:45:22
Problema Range minimum query Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.92 kb
#include <iostream>
#include <fstream>

using namespace std;

int n,m,t[100003],a[100003][30],v[100003];

inline void ConMat()
{
    int i,k;
    for(i=1;i<=n;++i)
        a[i][0]=t[i];
    for(k=1;(1<<k)<=n;++k)
        for(i=1;i<=n-(1<<k)+1;++i)
            a[i][k]=min(a[i][k-1],a[i+(1<<(k-1))][k-1]);
    v[1]=0;
    for(i=2;i<=n;++i)
        v[i]=v[i/2]+1;
}

inline void Citire()
{
    int i,x,y,sol,k,L;
    ifstream fin("rmq.in");
    ofstream fout("rmq.out");
    fin>>n>>m;
    for(i=1;i<=n;++i)
        fin>>t[i];
    ConMat();
    for(i=1;i<=m;++i)
    {
        fin>>x>>y;
        L=y-x+1;
        k=v[L];
        sol=min(a[x][k],a[y-(1<<k)+1][k]);
        fout<<sol<<"\n";
    }
    fin.close();
    fout.close();
}

int main()
{
    Citire();
    for(int i=0;i<=n;++i)
    {
        for(int j=0;j<=5;++j)
            cout<<a[i][j]<<"\t";
        cout<<"\n";
    }
    return 0;
}