Pagini recente » Cod sursa (job #543878) | Cod sursa (job #735219) | Cod sursa (job #1672931) | Cod sursa (job #217114) | Cod sursa (job #161554)
Cod sursa(job #161554)
# include <stdio.h>
# include <cmath>
using namespace std;
# define input "rmq.in"
# define output "rmq.out"
# define max 100001
# define min(a,b) (a<b?a:b)
int x,y,i,j,n,m,a[19][max],k,lg[max];
int main()
{
freopen(input,"r", stdin);
freopen(output, "w", stdout);
scanf("%d%d",&n,&m);
for(i=1;i<=n;i++)
scanf("%d",&a[0][i]);
k=0;
for ( i = 2; i <= n; i++ )
lg[i]=lg[i/2]+1;
while(1<<k <= n) k++;
k--;
for(j=1;j<=k;++j)
for(i=1;i<=n;++i)
{
x = i + (1 << (j-1));
if(x <= n)
a[j][i] = min(a[j-1][x],a[j-1][i]);
else
a[j][i] = a[j-1][i];
}
for(i=1;i<=m;++i)
{
scanf("%d%d",&x,&y);
if(x == y)
{
printf("%d\n",a[0][x]);
continue;
}
k = lg[y-x];
printf("%d\n",min(a[k][x],a[k][y-(1<<k)+1]));
}
return 0;
}