Pagini recente » Cod sursa (job #2715179) | Cod sursa (job #2737463) | Cod sursa (job #3291577) | Cod sursa (job #1705367) | Cod sursa (job #3256497)
#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=st+dr-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;
fout<<querry(a,b)<<' ';
}
return 0;
}