Pagini recente » Cod sursa (job #466622) | Borderou de evaluare (job #931567) | Cod sursa (job #2764636) | Cod sursa (job #27111) | Cod sursa (job #2924326)
#include <fstream>
#include <vector>
#include <string>
#include <map>
#include <unordered_map>
#include <algorithm>
#include <cmath>
#include <stack>
#include <queue>
#include <set>
#include <cstring>
#include <bitset>
//#include <bits/stdc++.h>
#define ll long long
#define ull unsigned long long
#define MOD
#define NMAX 100001
#define KMAX 105
#define LIM 1000
#define INF (1LL << 60)
#define LOG 17
using namespace std;
ifstream cin("rmq.in");
ofstream cout("rmq.out");
int n, Q;
int a[NMAX];
int RMQ[NMAX][LOG];
int Query(int L, int R)
{
int lung = R - L + 1;
int k = 0;
while (1 << (k + 1) <= lung)
k++;
return min(RMQ[L][k], RMQ[R - (1 << k) + 1][k]);
}
int main()
{
ios::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
cin >> n >> Q;
for (int i = 1; i <= n; i++)
cin >> a[i];
for (int i = 1; i <= n; i++)
RMQ[i][0] = a[i];
for (int k = 1; k < LOG; k++)
for (int i = 1; i + (1 << k) - 1 <= n; i++)
RMQ[i][k] = min(RMQ[i][k - 1], RMQ[i + (1 << k - 1)][k-1]);
while (Q--)
{
int L, R;
cin >> L >> R;
cout << Query(L, R) << '\n';
}
return 0;
}