Pagini recente » Cod sursa (job #2364153) | Cod sursa (job #92376) | Cod sursa (job #2657776) | Cod sursa (job #2097228) | Cod sursa (job #3129741)
#define _CRT_SECURE_NO_WARNINGS
#include <vector>
#include <iomanip>
#include <fstream>
#include <algorithm>
#include <cstring>
#include <stack>
#include <queue>
#include <bitset>
#include <string>
#include <map>
#include <unordered_map>
//#include <bits/stdc++.h>
using namespace std;
ifstream cin("rmq.in");
ofstream cout("rmq.out");
//rmq again
// 1 2 3 4 5 6 7 8 9 10 11 12 13
const int NMAX = 1e5, LOGMAX = 21;
int v[NMAX], n,m;
int logg[NMAX];
int a[NMAX][LOGMAX];
void read()
{
cin >> n >> m;
for (int i = 1; i <= n; ++i)
cin >> v[i], a[i][0]=v[i];
}
void get_log()
{
for (int i = 2; i < NMAX; ++i)
logg[i] = 1 + logg[i / 2];
}
void preprocess()
{
for (int j = 1; j <= logg[n]; ++j)
for (int i = 0; i <= n - (1 << (j - 1)); ++i)
a[i][j] = min(a[i][j - 1], a[i+(1<<(j-1))][j - 1]);
//minimul care pleaca de la elem 'i' cu lg 'j' este min dintre
}
int query(int x, int y)
{
int lg = y - x + 1;
int Log = logg[lg] - 1;
return min(a[x][Log], a[y - (1 << Log)+1][Log]);
}
int main()
{
read();
get_log();
preprocess();
for (int i = 1; i <= m; ++i)
{
int x, y;
cin >> x >> y;
cout << query(x, y)<<'\n';
}
}