Cod sursa(job #1677922)

Utilizator catalin9898Bajenaru Catalin catalin9898 Data 6 aprilie 2016 21:18:24
Problema Range minimum query Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.68 kb
#include <cstdio>
using namespace std;
int mi(int a,int b)
{
    if(a>b)return b;
    return a;
}
int log[100001],r[20][100001];
int main()
{   freopen("rmq.in","r",stdin);
freopen("rmq.out","w",stdout);
    int i,j,k,n,m,a,b;
    log[1]=0;
    scanf("%d%d",&n,&m);
    for(i=2;i<=n;i++)
        log[i]=log[i/2]+1;
    for(i=1;i<=n;i++)scanf("%d",&(r[0][i]));

      for(j=1;j<=log[n];j++)
        for(i=(1<<j);i<=n;i++)
      {
          k=1<<(j-1);
          r[j][i]=mi(r[j-1][i],r[j-1][i-k]);
      }

      for(i=0;i<m;i++)
      {
          scanf("%d%d",&a,&b);
          k=log[b-a+1];
          printf("%d\n",mi(r[k][b],r[k][a+(1<<k)-1 ] ) );
      }

}