Pagini recente » Cod sursa (job #2222713) | Cod sursa (job #1579150) | Cod sursa (job #1641726) | Cod sursa (job #1451730) | Cod sursa (job #2561070)
#include <bits/stdc++.h>
#define vec vector<vector<int>>
using namespace std;
ifstream in;
ofstream out;
int schema[100005][20];
vector<int> v;
void build(int n)
{
for (int j = 1; (1<<j)<= n; j++)
{
for (int i = 0; i + (1 << j) - 1 < n; i++)
{
if (v[schema[i][j - 1]] < v[schema[i + (1 << (j - 1))][j - 1]])
schema[i][j]=schema[i][j - 1];
else
schema[i][j]=schema[i + 1 << (j - 1)][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 >> x;
v.push_back(x);
schema[i][0]=i;
}
build(n);
for (int i = 1; i <= m; i++)
{
in >> x >> y;
out << sol(x-1, y-1) << '\n';
}
}