Pagini recente » Cod sursa (job #1880925) | Cod sursa (job #340353) | Cod sursa (job #1179405) | Cod sursa (job #1676846) | Cod sursa (job #2286802)
#include <bits/stdc++.h>
#define N_max 100010
using namespace std;
ifstream f("rmq.in");
ofstream g("rmq.out");
int m[N_max][18], arr[N_max];
int pmini(int x, int y)
{
return ((arr[x] < arr[y]) ? x:y);
}
void rmq(int n)
{
for(int i = 0; i < n; i++) m[i][0] = i;
for (int i = 1; (1 << i) < n; i++){
for (int j = 0; j - 1 + (1 << i) < n; j++){
int p1 = m[j][i - 1];
int p2 = m[j + (1 << (i - 1))][i - 1];
m[j][i] = pmini(p1, p2);
}
}
}
int query(int l, int r)
{
int diff = r - l + 1;
int k = log(diff);
int p1 = m[l][k];
int p2 = m[l + diff - (1<<k)][k];
return arr[pmini(p1, p2)];
}
int main()
{
int n ,q;
f>>n>>q;
for (int i = 0; i < n; i++) f>>arr[i];
rmq(n);
for(int i = 1; i <= q; i++){
int p1, p2;
f>>p1>>p2;
g<<query(p1 - 1, p2 - 1)<<"\n";
}
return 0;
}