Pagini recente » Cod sursa (job #1485099) | Cod sursa (job #531931) | Cod sursa (job #497130) | Cod sursa (job #1637) | Cod sursa (job #2562984)
#include <bits/stdc++.h>
#define vec vector<vector<int>>
using namespace std;
ifstream in;
ofstream out;
int schema[100005][20];
int v[100005];
void build(int n)
{
for (int j = 1; (1 << j) <= n; j++)
{
int k = 1 << j;
int k1= 1 << (j-1);
for (int i = 0; (i + k - 1) < n; i++)
{
if (v[schema[i][j - 1]] < v[schema[i + k1][j - 1]])
schema[i][j] = schema[i][j - 1];
else
schema[i][j] = schema[i + k1][j - 1];
}
}
}
int sol(int low, int high)
{
int l = high - low + 1;
int k = log2(l);
if (v[schema[low][k]] <= v[schema[low + l - (1 << k)][k]])
return v[schema[low][k]];
else
return v[schema[high - (1 << k) + 1][k]];
}
int n, m, x, y;
int main()
{
in.open("rmq.in");
out.open("rmq.out");
in >> n >> m;
for (int i = 0; i < n; i++)
{
in >> v[i];
schema[i][0] = i;
}
build(n);
/*for (int i = 0; i < n; i++)
{
for (int j = 0; (1 << j) <= n; j++)
out << schema[i][j] << " ";
out << endl;
}*/
for (int i = 1; i <= m; i++)
{
in >> x >> y;
out << sol(x-1, y-1) << '\n';
}
}