Cod sursa(job #1052945)

Utilizator andreip1996Paun Andrei andreip1996 Data 11 decembrie 2013 22:19:48
Problema Range minimum query Scor 20
Compilator cpp Status done
Runda Arhiva educationala Marime 0.74 kb
#include<cstdio>
#include<iostream>

using namespace std;
int n,m,a[18][100001],x,y;

int min(int x,int y)
{
    if(x<y)
    return x;
    else
    return y;
}

int main()
{   freopen("rmq.in","r",stdin);
    freopen("rmq.out","w",stdout);
    scanf("%d%d",&n,&m);
    for(int i=1;i<=n;i++)
        scanf("%d",&a[0][i]);
    int di=(1<<1);
    for(int i=1;di<=n;)
      {
          for(int j=1;j+di-1<=n;j++)
                    a[i][j]=min(a[i-1][j],a[i-1][j+(1<<(i-1))]);
          i++;
          di=(1<<i);
      }
    for(int i=1;i<=m;i++)

    {  scanf("%d%d",&x,&y);
       int k=0;
       while((1<<k)<=y-x)k++;k--;
       int mm=min(a[k][x],a[k][y-(1<<k)+1]);
       printf("%d\n",mm);
    }

    return 0;
}