Pagini recente » Cod sursa (job #372282) | Cod sursa (job #820080) | Cod sursa (job #532837) | Cod sursa (job #2990170) | Cod sursa (job #2981746)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("rmq.in");
ofstream fout("rmq.out");
const int NMAX=1e6+5;
const int GMAX=105;
int N, M, rmq[GMAX][NMAX], lg[NMAX], x, y, k, a, b;
int main()
{
fin>>N>>M;
for(int i=1; i<=N; i++)
{
fin>>x;
rmq[0][i]=x;
}
lg[1]=0;
for(int i=2; i<=NMAX; i++) lg[i]=lg[i/2]+1;
for(int i=1; i<=lg[N]; i++)
{
for(int j=1; j<=N; j++)
{
y=1<<(i-1);
rmq[i][j]=min(rmq[i-1][j],rmq[i-1][j+y]);
}
}
for(int i=1; i<=M; i++)
{
fin>>a>>b;
k=lg[b-a + 1];
cout << min(rmq[k][a],rmq[k][b-(1<<(k))+1])<< '\n';
}
return 0;
}