Pagini recente » Cod sursa (job #1508926) | Cod sursa (job #1500101) | Cod sursa (job #1283215) | Cod sursa (job #1655679) | Cod sursa (job #2229665)
#include <fstream>
#define VAL 100005
#define PUT 25
using namespace std;
ifstream fin("rmq.in");
ofstream fout("rmq.out");
int N, M, i, j, v[VAL];
int RMQ[VAL][PUT], LOG[VAL];
int P, ANS, be, en, A, B;
int main()
{
fin >> N >> M;
for (i=1; i<=N; i++)
{
fin >> v[i];
RMQ[i][0]=v[i];
LOG[i]=P;
if (i==2*(1 << P))
P++;
}
for (j=1; j<=P; j++)
{
for (i=1; i+(1 << j)-1<=N; i++)
{
RMQ[i][j]=RMQ[i][j-1];
if (RMQ[i+(1 << (j-1))][j-1]>0)
RMQ[i][j]=min(RMQ[i][j], RMQ[i+(1 << (j-1))][j-1]);
}
}
for (i=1; i<=M; i++)
{
fin >> be >> en;
A=LOG[en-be+1];
B=(1 << A);
ANS=min(RMQ[be][A], RMQ[en-B+1][A]);
fout << ANS << '\n';
}
fin.close();
fout.close();
return 0;
}