Pagini recente » Cod sursa (job #55635) | Cod sursa (job #2940603) | Cod sursa (job #1152819) | Cod sursa (job #1193396) | Cod sursa (job #161542)
Cod sursa(job #161542)
# include <stdio.h>
# include <cmath>
using namespace std;
# define input "rmq.in"
# define output "rmq.out"
# define max 1001
# define min(a,b) (a<b?a:b)
int x,y,i,j,n,m,a[max][65],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[i][0]);
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++)
{
a[i][j] = a[i][j-1];
if( i + (1 << (j - 1)) <=n && a[i + (1 << (j - 1))][j-1] < a[i][j]) a[i][j] = a[i+ (1 << (j - 1))][j-1];
}
for(i=1;i<=m;i++)
{
scanf("%d%d",&x,&y);
if(x == y)
{
printf("%d\n",a[x][0]);
continue;
}
k = lg[y-x];
printf("%d\n",min(a[x][k],a[y-(1<<k)+1][k]));
}
return 0;
}