Pagini recente » Cod sursa (job #2344972) | Cod sursa (job #2669246) | Cod sursa (job #1366748) | Cod sursa (job #1435941) | Cod sursa (job #170153)
Cod sursa(job #170153)
#include <stdio.h>
long n,m;
long lg[100010];
long a[21][100010];
int min(long x, long y)
{
if (x<y)
return x;
else return y;
}
int main()
{
freopen("rmq.in","r",stdin);
freopen("rmq.out","w",stdout);
scanf("%ld %ld",&n,&m);
for (int i=1; i<=n; i++)
scanf("%ld",&a[0][i]);
for (int i=2; i<=n; i++)
lg[i]=lg[i/2]+1;
int h=1;
for (int i=1; i<=lg[n]; i++)
{
h=h*2;
for (int j=1; j<=n-h+1; j++)
a[i][j]=min(a[i-1][j],a[i-1][j+h/2]);
}
for (int i=0; i<m; i++)
{
int x,y;
scanf("%ld %ld",&x,&y);
int L=y-x+1;
int l=lg[L];
int lung=1<<l;
printf("%ld\n",min(a[l][x],a[l][y-lung+1]));
}
fclose(stdin);
fclose(stdout);
return 0;
}