Pagini recente » Cod sursa (job #2939503) | Cod sursa (job #2037361) | Cod sursa (job #1760501) | Cod sursa (job #2925765) | Cod sursa (job #2785520)
#include<iostream>
#include<fstream>
#include<algorithm>
#include<set>
#include<map>
#include<unordered_set>
#include<unordered_map>
#include<vector>
#include<stack>
#include<queue>
#define all(v) v.begin(),v.end()
#define sorti(v) sort(all(v))
#define desc(x) greater<x>()
#define sortd(v) sort(all(v),desc(decltype(v[0])))
#define hmap unordered_map
#define pow2(x) (1<<(x))
#define hset unordered_set
#define pq priority_queue
#define inf 0x3f3f3f3f
#define exists(x,v) (v.find(x)!=v.end())
#define inrange(x,a,b) (x>=a && x<=b)
#define printv(v) {for(auto it:v) cout<<it<<' ';cout<<'\n';}
#define printa(v,a,b) {for(int i=a;i<=b;i++ ) cout<<v[i]<<' ';cout<<'\n';}
using namespace std;
typedef long long ll;
typedef long double ld;
typedef pair<int, int> pii;
typedef pair<long, long> pll;
const int lim = 1e5 + 5;
int lg2[lim];
int rmq[20][lim];
int n,m;
int a[lim];
int main()
{
freopen("rmq.in", "r", stdin);
freopen("rmq.out", "w", stdout);
ios::sync_with_stdio(0); cin.tie(0); cout.tie(0);
cin >> n>>m;
for (int i = 2; i <= n; i++)
lg2[i] = lg2[i / 2] + 1;
for (int i = 1; i <= n; i++)
{
cin >> a[i];
rmq[0][i] = a[i];
}
for (int lg = 1; pow2(lg) <= n; lg++)
for (int i = 1; i + pow2(lg) - 1 <= n; i++)
rmq[lg][i] = min(rmq[lg - 1][i], rmq[lg - 1][i + pow2(lg - 1)]);
for (int i = 1; i <= m; i++)
{
int l, r;
cin >> l >> r;
int p2 = lg2[r - l + 1];
cout << min(rmq[p2][l], rmq[p2][r - (1 << p2) + 1])<<'\n';
}
}