Pagini recente » Cod sursa (job #1073744) | Cod sursa (job #1136031) | Cod sursa (job #2816488) | Cod sursa (job #2134732) | Cod sursa (job #723714)
Cod sursa(job #723714)
#include<stdio.h>
using namespace std;
int n,m;
int a[18][100002];
int lg[100002];
void citire()
{
int i;
scanf("%d %d",&n,&m);
for(i=1;i<=n;++i)
scanf("%d",&a[0][i]);
}
void rezolv()
{
int k,i,j,x,y;
for(j=1;(1<<j) <= n;++j)
for(i=1;i+(1<<j)-1<=n;++i)
{
x=a[j-1][i];
y=a[j-1][i+(1<<(j-1))];
if(a[x]<a[y])
a[j][i]=x;
else
a[j][i]=y;
}
lg[1]=0;
for(i=2;i<=n;++i)
lg[i]=lg[i/2]+1;
}
void scrie()
{
int i,x,y,k,r1,r2;
for(i=1;i<=m;++i)
{
scanf("%d %d",&x,&y);
k=lg[y-x+1];
r1=a[k][x];
r2=a[k][y-(1<<k)+1];
if(r1<=r2)
printf("%d\n",r1);
else
printf("%d\n",r2);
}
}
int main()
{
freopen("rmq.in","r",stdin);
freopen("rmq.out","w",stdout);
citire();
rezolv();
scrie();
fclose(stdin);
fclose(stdout);
return 0;
}