Pagini recente » Cod sursa (job #1409402) | Cod sursa (job #1147356) | Cod sursa (job #1480629) | Cod sursa (job #1802095) | Cod sursa (job #1672507)
#include <cstdio>
#include <algorithm>
#define Max 100005
using namespace std;
int lg[Max], rmq[Max][20];
int main()
{
freopen ("rmq.in", "r", stdin);
freopen ("rmq.out", "w", stdout);
int n, m, i, j;
scanf("%d %d", &n, &m);
for(i= 1; i<= n; i++)
scanf("%d", & rmq[i][0]);
lg[1]= 0;
for(i= 2; i<= n; i++)
lg[i]= lg[i/2]+ 1;
for(j= 1; (1<<j)< n; j++)
for(i= 1; i+ (1<<j)- 1<= n; i++)
rmq[i][j]= min(rmq[i][j-1], rmq[i+ (1<<(j-1))][j-1]);
int k, raspuns, p, q;
for(i= 1; i<= m; i++)
{
scanf("%d %d", &p, &q);
k= lg[q- p+ 1];
raspuns= min(rmq[p][k], rmq[q- (1<<k)+1][k] );
printf("%d\n", raspuns);
}
return 0;
}