Pagini recente » Flux maxim intr-o retea de transport, algoritmul lui Dinic | Cod sursa (job #288082) | simulare1_martie | Profil eudanip | Cod sursa (job #883487)
Cod sursa(job #883487)
#include<stdio.h>
int N,M,b,c,d;
inline int mi(int x,int y)
{
if(x>y)
return y;
else
return x;
}
int a[100010],s[100010][20];
int main()
{
freopen("rmq.in","r",stdin);
freopen("rmq.out","w",stdout);
scanf("%d%d",&N,&M);
for(int i=1;i<=N;++i)
scanf("%d",&a[i]);
int x=1;
int j=1;
for(int i=1;i<=N;++i)
s[i][0]=a[i];
while(x<=N)
{
for(int i=1;i<=N;++i)
{
if(i+x>N)
s[i][j]=s[i][j-1];
else
s[i][j]=mi(s[i][j-1],s[i+x][j-1]);
}
++j;
x=x*2;
b=j;
}
for(int i=1;i<=M;++i)
{
scanf("%d%d",&c,&d);
int e=d-c+1;
int t=0;
int z=1;
while(z<=e)
{
++t;
z=2*z;
}
printf("%d\n",mi(s[c][t-1],s[d-z/2+1][t-1]));
}
return 0;
}