Pagini recente » Cod sursa (job #1490033) | Cod sursa (job #3170173) | Cod sursa (job #1628269) | Cod sursa (job #2696098) | Cod sursa (job #2886773)
//#include <iostream>
#include <fstream>
using namespace std;
ifstream cin("rmq.in");
ofstream cout("rmq.out");
int minime[18][100005];
int a[100005];
int log[100005];
void preprocess(int arr[], int n)
{
for (int i = 1; i <= n; i++)
minime[0][i] = arr[i];
for (int i = 1; (1<<i) <= n; i++)
{
for (int j = 1; j <= n - (1<<i) + 1 ; j++)
{
int lung= 1<<(i-1);
minime[i][j]=min( minime[i-1][j], minime[i-1][j+lung]);
}
}
}
void RMQ(int arr[], int n, int x, int y)
{
int nr=y-x+1;
int lung=log[nr];
int pas=nr- (1<<lung);
cout << min( minime[lung][x], minime[lung][x+pas]) << endl;
}
int main()
{
int n;
cin >> n;
int m;
cin >> m;
for(int q = 1 ; q <= n ; q++)
{
cin >> a[q];
}
preprocess(a, n);
log[1] = 0;
for(int i = 2; i <= n; i++)
log[i] = log[i/2] + 1;
for(int q = 0 ; q < m ; q++)
{
int x,y;
cin >> x >> y;
RMQ(a , n , x , y);
}
return 0;
}