Pagini recente » Cod sursa (job #1529418) | Cod sursa (job #3039466) | Cod sursa (job #3041275) | Cod sursa (job #3037464) | Cod sursa (job #966639)
Cod sursa(job #966639)
#include <fstream>
#include <vector>
#include <bitset>
#include <queue>
#include <algorithm>
#include <ctime>
#include <utility>
using namespace std;
ifstream cin("rmq.in");
ofstream cout("rmq.out");
const int N = 100005;
int n, m, v[N], lg[N], RMQ[20][N];
int main()
{
cin >> n >> m;
for(int i = 1 ; i <= n ; ++ i)
cin >> v[i];
for(int i = 2 ; i <= n ; ++ i)
lg[i] = lg[i/2] + 1;
//cout << "lg[" <<i<< "] = " << lg[i] << "\n";
for(int i = 1 ; i <= n ; ++ i)
RMQ[0][i] = v[i];
for(int i = 1 ; (1 << i) <= n ; ++ i)
for(int j = 1 ; j <= n - (1<<i) + 1; ++ j)
{
int l = ( 1 << (i-1) );
//cout << " i = " << i << " j = " << j << " l = " << l << '\n';
RMQ[i][j] = min(RMQ[i-1][j], RMQ[i-1][j+l]);
//cout << "RMQ["<<i<<"]["<<j<<"] = " << RMQ[i][j] << '\n';
}
for(int i = 1; i <= m ; ++ i)
{
int x, y;
cin >> x >> y;
int diff = y - x + 1;
int l = lg[diff];
int sh = diff - (1 << l);
cout << min(RMQ[l][x], RMQ[l][x+sh]) << "\n";
}
return 0;
}