Pagini recente » Cod sursa (job #3264986) | Cod sursa (job #1650710) | Cod sursa (job #1050013) | Cod sursa (job #3240264) | Cod sursa (job #623300)
Cod sursa(job #623300)
#include <iostream>
#include <stdio.h>
#include <math.h>
#define nm 100000
#define abs(x) x<0 ? (-x) : (x)
using namespace std;
int a[nm],m[nm][20],i,j,n,q,k,x,y,c1;
double c;
int main()
{
int exp;
freopen("rmq.in","r",stdin);
freopen("rmq.out","w",stdout);
scanf("%d %d\n",&n,&q);
for(i=1;i<=n;i++)
{
scanf("%d\n",&a[i]);
m[i][0]=a[i];
}
j=2;
exp=1;
while(j<=n)
{
x=j/2;
for(i=1;i<=n-j+1;i++)
if(a[m[i][exp-1]]<a[m[i+x][exp-1]]) m[i][exp]=m[i][exp-1];
else m[i][exp]=m[i+x][exp-1];
j=j*2;
exp=exp+1;
}
for(i=1;i<=q;i++)
{
scanf("%d %d\n",&x,&y);
c=floor(log2(abs(y-x+1)));
c1=floor(c);
k=floor(pow(2,c));
if(a[m[x][c1]]<a[m[y-k+1][c1]]) printf("%d\n",a[m[x][c1]]);
else printf("%d\n",a[m[y-k+1][c1]]);
}
fclose(stdout);
fclose(stdin);
return 0;
}