Pagini recente » Cod sursa (job #1924114) | Cod sursa (job #128740) | Cod sursa (job #2596749) | Cod sursa (job #1645502) | Cod sursa (job #3256500)
#include <bits/stdc++.h>
using namespace std;
ifstream fin ("rmq.in");
ofstream fout ("rmq.out");
int const lmax=100007;
int rmq[27][lmax];///rmq[l][x] este min pentru intervalul [x,x+(1<<l)-1]
int n,m,lg2[lmax],v[lmax];
void precalc_rmq()
{
for(int i=1;(1<<i)<n;i++)
{
for(int j=0;j+(1<<i)-1<n;j++)
{
rmq[i][j]=min(rmq[i-1][j],rmq[i-1][j+(1<<(i-1))]);
}
}
}
int querry(int st, int dr)
{
int len=dr-st+1;
int loglen=lg2[len];
return min(rmq[loglen][st],rmq[loglen][dr-(1<<loglen)+1]);
}
int main()
{
fin>>n>>m;
for(int i=0;i<n;i++)
{
fin>>v[i];
rmq[0][i]=v[i];
}
lg2[1]=0;
for(int i=2;i<lmax;i++)
{
lg2[i]=lg2[i>>1]+1;
}
precalc_rmq();
for(int i=0;i<m;i++)
{
int a, b;
fin>>a>>b;
a--;b--;
fout<<querry(a,b)<<'\n';
}
return 0;
}