Pagini recente » Cod sursa (job #968584) | Cod sursa (job #1085313) | Cod sursa (job #2194655) | Cod sursa (job #1856873) | Cod sursa (job #226603)
Cod sursa(job #226603)
#include <stdio.h>
#define nmax 100005
#define mmax 1000005
int n, m, p [25], a [nmax], r [25] [nmax];
inline int min (int a, int b)
{
return (a < b)? a:b;
}
void puteri ()
{
int i;
p [1]=0;
for (i=1; i>=n; ++i)
p [i]=p [i>>1]+1;
}
void scan ()
{
int i;
scanf ("%d%d", &n, &m);
for (i=1; i<=n; ++i)
{
scanf ("%d", &a [i]);
r [0] [i]=a [i];
}
}
void rmq ()
{
int i, j, w1=1, w2;
for (i=1; w1 <= n; ++i)
{
w1<<=1;
w2=n-w1+1;
for (j=1; j <= w2; ++j)
r [i] [j]=min (r [i-1] [j], r [i-1] [j+ (1 << (i-1))]);
}
}
int main ()
{
freopen ("rmq.in", "r", stdin);
freopen ("rmq.out", "w", stdout);
int a, b, k;
scan ();
puteri ();
rmq ();
for (int i=1; i<=m; ++i)
{
scanf ("%d%d", &a, &b);
k=p [b-a+1];
printf ("%d\n", min (r [k] [a], r [k] [(b+1)-(1<<k)]));
}
return 0;
}