Pagini recente » Cod sursa (job #1292112) | Cod sursa (job #2101024) | Cod sursa (job #2064090) | Cod sursa (job #2181918) | Cod sursa (job #2741825)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("rmq.in");
ofstream fout("rmq.out");
int n, m, lgn;
int v[100001], minq[100001][17], lgi[100001];
int query(int st, int dr)
{
int j=lgi[dr-st+1];
return min(minq[st][j], minq[dr-(1<<j)+1][j]);
}
int main()
{
int i, j;
fin >> n >> m;
for(i=1; i<=n; i++)
fin >> v[i];
int cnt=0;
for(i=2; i<=n; i++)
{
if(i==(1<<(cnt+1)))
cnt++;
lgi[i]=cnt;
}
lgn=log2(n);
for(i=1; i<=n; i++)
minq[i][0]=v[i];
for(j=1; j<=lgn; j++)
for(i=1; i+(1<<j)-1<=n; i++)
minq[i][j]=min(minq[i][j-1], minq[i+(1<<(j-1))][j-1]);
int st, dr;
for(i=0; i<m; i++)
{
fin >> st >> dr;
fout << query(st, dr) << '\n';
}
return 0;
}