Pagini recente » Cod sursa (job #4323) | Cod sursa (job #1939965) | Cod sursa (job #2792478) | Cod sursa (job #1407647) | Cod sursa (job #1957823)
#include <fstream>
#include <cmath>
using namespace std;
ifstream fi("rmq.in");
ofstream fo("rmq.out");
int N,M,rmq[100005][20];
// rmq[i][j][k] = elementul de valoare maxima dintr-un sir
// cu primul elem pe pozitia i lungimea 2^k
void Build()
{
for(int i=1;i<=N;i++) fi>>rmq[i][0];
for(int k=1;(1<<k) <= N;k++)
for(int i=1;i+(1<<k)-1<=N;i++)
rmq[i][k]=min(rmq[i][k-1],rmq[i+(1<<k)-1][k-1]);
}
int Query(int i,int j)
{
int L=log2(j-i);
return min(rmq[i][L],rmq[j-(1<<L)+1][L]);
}
int main ()
{
fi>>N>>M;
Build();
while(M--)
{
int i,j;
fi>>i>>j;
fo<<Query(i,j)<<'\n';
}
return 0;
}