Cod sursa(job #2026940)

Utilizator catalin9898Bajenaru Catalin catalin9898 Data 25 septembrie 2017 13:02:37
Problema Range minimum query Scor 10
Compilator cpp Status done
Runda Arhiva educationala Marime 0.62 kb
#include <iostream>
#include <cstdio>
using namespace std;

int r[100001][17],log[100001];
int main()
{freopen("rmq.in","r",stdin);
freopen("rmq.out","w",stdout);
int i,j,m,n,p,a,b;
scanf("%d%d",&n,&m);
for(i=0;i<n;i++)scanf("%d",&r[0][i]);
for(i=2;i<=n;i++)log[i]=log[i/2]+1;
for(i=1;i<n;i=i<<1)
{p=i/2+1;
    for(j=0;j<n-i;j++)
    {
        if(r[i-1][j]<r[i-1][j+p])r[i][j]=r[i-1][j];
        else r[i][j]=r[i-1][j+p];
    }
}
for(i=0;i<m;i++)
{
    scanf("%d%d",&a,&b);
    p=log[b-a];
    if(r[p][a-1]<r[p][b-p-1])printf("%d\n",r[p][a-1]);
        else printf("%d\n",r[p][b-p-1]);
}


    return 0;
}