Cod sursa(job #2284695)

Utilizator coto2464andrei cotofrei coto2464 Data 17 noiembrie 2018 12:47:52
Problema Range minimum query Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.4 kb
#include <fstream>
using namespace std;
ifstream f("rmq.in");
ofstream g("rmq.out");
int v[100][100];

int min2(int nr){
    int p=1,n=0;
    while(p<=nr)
    {
        p*=2;
        n++;
    }
    return n-1;
}

int putere(int nr,int k)
{
    int res=1;
    while(k){
        res*=nr;
        k--;
    }
    return res;
}

int main()
{
    int n,m,i,j;
    f>>n>>m;
    for(i=1;i<=n;i++)
        f>>v[1][i];
    int nr=n-3;
    for(i=1;i<=nr;i++)
    {
        if(i==nr)
        {
            if(n-nr+i-1==4)
            {
                //v[i+1][j]=min(v[i][j],v[i][j+1]);
                v[i+1][1]=min(v[i][1],v[i][2]);
                v[i+1][2]=min(v[i][3],v[i][4]);
            }
            else
            {
                //v[i+1][j]=min(v[i][j],v[i][j+1]);
                v[i+1][1]=min(v[i][1],v[i][2]);
                v[i+1][2]=min(v[i][2],v[i][3]);
            }
        }
        else
        {
            for(j=1;j<n;j++){
                v[i+1][j]=min(v[i][j],v[i][j+1]);
                //g<<i+1<<" "<<j<<":"<<v[i][j]<<"+"<<v[i][j+1]<<"\n";
            }
        }
    }
    /*for(i=1;i<=n-2;i++){
        for(j=1;j<=n;j++)
            g<<v[i][j]<<" ";
        g<<"\n";
    }*/
    for(j=1;j<=m;j++)
    {
        int a,b;
        f>>a>>b;
        int num=min2(b-a+1);
        g<<min(v[num+1][a],v[num+1][a+1])<<"\n";
    }

    return 0;
}