Pagini recente » Cod sursa (job #2361356) | Cod sursa (job #2872089) | Cod sursa (job #1277295) | Cod sursa (job #97091) | Cod sursa (job #1640115)
#include <fstream>
using namespace std;
# define NMAX 100003
# define LMAX 32
//rmq[i][j]=min din intervalul j..j+2^i-1
int rmq[LMAX][NMAX];
int lg[NMAX],v[NMAX];
int main()
{
ifstream fin ("rmq.in");
ofstream fout ("rmq.out");
int n;
int m;
fin>>n;
fin>>m;
for (int i=1;i<=n;++i)
{
fin>>v[i];
}
lg[1]=0;
for (int i=2;i<=n;++i)
{
lg[i]=lg[i/2]+1;
}
for (int i=1;i<=n;++i)
{
rmq[0][i]=v[i];
}
for (int i=1;i<=lg[n];++i)
{
for (int j=1;j+(1<<i)-1<=n;++j)
{
rmq [i][j] = min(rmq[i-1][j],rmq[i-1][j+(1<<(i-1))]);
}
}
int p1,p2;
for(int i=1;i<=m;i++)
{
fin>>p1>>p2;
int k=lg[p2-p1+1];
fout<<min(rmq[k][p1],rmq[k][p2-(1<<k)+1])<<"\n";
}
}