Cod sursa(job #1897118)

Utilizator DeleDelegeanu Alexandru Dele Data 1 martie 2017 10:20:27
Problema Range minimum query Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.92 kb
#include <fstream>
using namespace std;
ifstream f("rmq.in");
ofstream g("rmq.out");
int n,m,i,j,nr,x,y,z,k,k1,a[100001],b[25][100001],p[25];
int main()
{
    f>>n>>m;
    for(i=1 ; i<=n ; ++i)
    {
        f>>a[i];
        b[0][i]=a[i];
    }
    g<<n<<'\n';
    nr=1;
    x=2;
    p[0]=1;
    while(x*2<n)
    {
        p[nr]=x;
        nr++;
        x*=2;
    }
    p[nr]=x;
    for(i=1 ; i<=nr ; ++i)
        for(j=1 ; j+p[i-1]<=n ; ++j)
            b[i][j]=min(b[i-1][j],b[i-1][j+p[i-1]]);
    for(i=0 ; i<=nr ; ++i)
    {
        for(j=1 ; j<=n ; ++j)
            g<<b[i][j]<<" ";
        g<<'\n';
    }
    for(k=1 ; k<=m ; ++k)
    {
        f>>i>>j;
        y=j-i+1;
        x=nr+1;
        for(k1=nr ; k1>=0 ; --k1)
            if(p[k1]<=y)
            {
                x=k1;
                break;
            }
        g<<min(b[x][i],b[x][j-p[x]+1])<<"\n";
    }
    return 0;
}