Pagini recente » Cod sursa (job #2748181) | Cod sursa (job #2718936) | Cod sursa (job #569038) | Cod sursa (job #3257278) | Cod sursa (job #2605598)
#include <fstream>
using namespace std;
ifstream fin("rmq.in");
ofstream fout("rmq.out");
short log[100001];
int A[100001], MIN[100001][18], M, N;
void preprocess()
{
for(short i=0;(1<<i)<=N;i++)
{
for(int j=0;j<(1<<i) && (1<<i)+j<=N;j++)
log[(1<<i)+j]=i;
}
for(int i=1;i<=N;i++)
MIN[i][0]=A[i];
for(short i=1;(1<<i)<=N;i++)
{
for(int j=1;j+(1<<i)-1<=N;j++)
MIN[j][i]=(MIN[j][i-1]<MIN[j+(1<<(i-1))][i-1])?MIN[j][i-1]:MIN[j+(1<<(i-1))][i-1];
}
}
void init()
{
fin>>N>>M;
for(int i=1;i<=N;i++)
fin>>A[i];
}
void query()
{
short k;
int x, y, rez;
for(int i=0;i<M;i++)
{
fin>>x>>y;
k=log[y-x+1];
rez=(MIN[x][k]<MIN[y-(1<<k)+1][k]?MIN[x][k]:MIN[y-(1<<k)+1][k]);
fout<<rez<<'\n';
}
}
int main()
{
init();
preprocess();
query();
return 0;
}