Pagini recente » Borderou de evaluare (job #1612708) | Borderou de evaluare (job #2683877) | Borderou de evaluare (job #878993) | Borderou de evaluare (job #872048) | Cod sursa (job #1672501)
#include <cstdio>
#include <algorithm>
#define Max 100005
using namespace std;
int log[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]);
log[1]= 0;
for(i= 2; i<= n; i++)
log[i]= log[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= log[q- p+ 1];
raspuns= min(rmq[p][k], rmq[q- (1<<k)+1][k] );
printf("%d\n", raspuns);
}
return 0;
}