Pagini recente » Cod sursa (job #2025042) | Cod sursa (job #331852) | Cod sursa (job #892556) | Cod sursa (job #972485) | Cod sursa (job #161548)
Cod sursa(job #161548)
# 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[max][20],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];
x = i + (1 << (j-1));
if( x <=n && a[x][j-1] < a[i][j]) a[i][j] = a[x][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;
}