Pagini recente » Cod sursa (job #359700) | Cod sursa (job #2367636) | Cod sursa (job #2387126) | Cod sursa (job #1541648) | Cod sursa (job #2738847)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("rmq.in");
ofstream fout("rmq.out");
int n, t;
int v[100100][22];
int logaritm[100100];
void precalc()
{
logaritm[1] = 0;
for(int i = 2; i <= i <= 100050; i ++)
{
logaritm[i] = logaritm[i / 2] + 1;
}
for(int i = 1; i <= 20; i ++)
{
int p2 = 1 << i;
for(int j = 1; j + p2 - 1 <= n; j ++)
{
v[j][i] = min(v[j][i-1], v[j + p2 / 2][i-1]);
}
}
}
int rmq(int l, int r)
{
int lg = r - l + 1;
int logg = logaritm[lg];
return min(v[l][logg], v[r - (1<<logg) + 1][logg]);
}
int main()
{
fin >> n >> t;
for(int i = 1; i <= n; i ++)
{
fin >> v[i][0];
}
precalc();
while(t--)
{
int l, r;
fin >> l >> r;
fout << rmq(l,r) << '\n';
}
return 0;
}