Pagini recente » Cod sursa (job #3042316) | Cod sursa (job #2758046) | Cod sursa (job #2493856) | Cod sursa (job #385958) | Cod sursa (job #2124920)
#include <fstream>
using namespace std;
ifstream fi("rmq.in");
ofstream fo ("rmq.out");
int n,nq,a[100005],m[100005][33];
void precalc()
{
int i,bit;
for (i=1;i<=n;i++) m[i][0]=a[i];
int bitmax=0;
while ((1<<bitmax)<n) bitmax++;
for (bit=1;bit<=bitmax;bit++)
for (i=1;i+(1<<bit)-1<=n;i++)
m[i][bit]=min(m[i][bit-1],m[i+(1<<(bit-1))][bit-1]);
}
int answer(int st,int dr)
{
int s1,s2,bit=0;
while ((1<<bit)<(dr-st)) bit++;
s1=m[st][bit];
s2=m[dr-(1<<bit)+1][bit];
return min(s1,s2);
}
int main()
{
fi>>n>>nq;
for (int i=1;i<=n;i++) fi>>a[i];
precalc();
for (int i=1;i<=nq;i++)
{
int p1,p2;
fi>>p1>>p2;
fo<<answer(p1,p2)<<'\n';
}
return 0;
}