Mai intai trebuie sa te autentifici.
Cod sursa(job #2275263)
Utilizator | Data | 2 noiembrie 2018 22:47:39 | |
---|---|---|---|
Problema | Range minimum query | Scor | 30 |
Compilator | cpp-64 | Status | done |
Runda | Arhiva educationala | Marime | 0.69 kb |
#include <cstdio>
#include <algorithm>
using namespace std;
int n,m,x,y,a[100050], r[20][100050];
int lg[20],k,i,j,l,dif;
int main()
{
freopen ("rmq.in", "r", stdin);
freopen ("rmq.out", "w", stdout);
scanf ("%d%d", &n, &m );
for ( i=1; i <= n ;i ++)
{
scanf ("%d", &a[i]);
r[0][i] = a[i];
}
for(i=1; (1<<i)<=n;i++)
for (j=1; j<=n-(1<<i)+1; j++)
{
k =(1<<(i-1));
r[i][j]=min(r[i-1][j], r[i-1][j+k]);
}
lg[1]=0;
for (i=2; i<=n; i++)
lg[i]=lg[i/2]+1;
for (i=1; i<=m; i++)
{
scanf ("%d%d", &x, &y );
dif=y-x+1;
k=lg[dif];
printf("%d\n", min(r[k][x], r[k][y-(1<<k)+1]));
}
return 0;
}