Pagini recente » Cod sursa (job #1718701) | Cod sursa (job #192009) | Cod sursa (job #1055904) | Cod sursa (job #2679550) | Cod sursa (job #1409773)
#include <fstream>
#include <vector>
#define NMax 100001
using namespace std;
vector<int> v, a[NMax];
int x, y, n, q, r;
int main()
{
ifstream fin ("rmq.in");
ofstream fout ("rmq.out");
fin >> n >> q;
v.push_back (0);
for (int i = 1; i <= n; i++)
fin >> x,
v.push_back (x),
a[i].push_back (i);
for (int i = 1, pw = 2; pw <= n; i++, pw<<=1)
for (int j = 1; j <= n - pw + 1; j++)
a[j].push_back ( (v[a[j][i-1]] < v[a[j+(pw>>1)][i-1]]) ? a[j][i-1] : a[j+(pw>>1)][i-1] );
for (int i = 1; i <= q; i++) {
fin >> x >> y;
r = v[x];
for (int nr = y-x+1, j = 0; nr; nr >>= 1, j++)
if (nr&1)
r = min (r, v[a[x][j]]),
x += (1<<j);
fout << r << '\n';
}
return 0;
}