Pagini recente » Cod sursa (job #1157291) | Cod sursa (job #2864134) | Cod sursa (job #1418380) | Cod sursa (job #914022) | Cod sursa (job #676794)
Cod sursa(job #676794)
#include <cstdio>
const int nmax=100005;
using namespace std;
int m[nmax][18],a[nmax],log[nmax],n,mi;
int min(int x,int y)
{ if(x<y)return x; else return y; return 0; }
void rmq()
{ int i,j;
m[1][0]=a[1]; log[1]=0;
for(i=2;i<=n;++i)
{
m[i][0]=a[i];
log[i]=log[i>>1]+1;
}
for(j=1;(1<<j)<=n;++j)
{
for(i=1;i<=n-(1<<j)+1;++i)
m[i][j]=min(m[i][j-1],m[i+(1<<(j-1))][j-1]);
}
}
int main()
{ int x,y,k,i;
freopen("rmq.out","w",stdout);
freopen("rmq.in","r",stdin); scanf("%d %d\n",&n,&mi);
for(i=1;i<=n;++i)
scanf("%d\n",&a[i]);
rmq();
for(i=1;i<=mi;++i)
{
scanf("%d %d\n",&x,&y);
k=log[y-x+1];
printf("%d\n",min(m[x][k],m[y-(1<<k)+1][k]));
}
fclose(stdin);
fclose(stdout);
return 0;
}