Cod sursa(job #2113434)

Utilizator sebi110Ciobanu Sebastian sebi110 Data 24 ianuarie 2018 16:11:09
Problema Range minimum query Scor 30
Compilator cpp Status done
Runda Arhiva educationala Marime 0.8 kb
#include <fstream>
#include <math.h>
using namespace std;
ifstream f("rmq.in");
ofstream g("rmq.out");
int q[100005][105],a[100005],p[105];
int main()
{
    int n,m,i,j,x,y;
    f>>n>>m;
    for(i=1;i<=n;i++)
        f>>a[i];
    p[0]=1;
    for(i=0;p[i]<=n;i++)
        p[i+1]=p[i]*2;
    for(i=1;i<=n;i++)
        q[i][0]=a[i];
    for(j=1;p[j]<=n;j++)
        for(i=1;i+p[j-1]<=n;i++)
        {
            q[i][j]=min(q[i][j-1],q[i+p[j-1]][j-1]);
        }
    for(i=1;i<=m;i++)
    {
        f>>x>>y;
        for(j=0;p[j]<=y-x+1;j++);
        j--;
        if(j!=0)
            g<<min(q[x][j],q[y-p[j]+1][j])<<'\n';
        else
        {
            if(y-x==1)
                g<<q[x][1]<<'\n';
            else
                g<<q[x][0]<<'\n';
        }
    }
    return 0;
}