Pagini recente » Cod sursa (job #299462) | Cod sursa (job #279880) | Cod sursa (job #378680) | Cod sursa (job #2569600) | Cod sursa (job #3175894)
#include <iostream>
#include <bits/stdc++.h>
using namespace std;
ifstream fin("rmq.in");
ofstream fout("rmq.out");
#define LOGN 18
#define MAXN 100000
int rmq[MAXN + 1][LOGN + 1];
int p[MAXN + 1];
int n,q;
int main()
{
fin >> n >> q;
for(int i=1;i<=n;i++)
{
fin >> rmq[i][0];
}
p[1]=0;
for(int i=2;i<=MAXN;i++)
{
p[i]=p[i/2]+1;
}
for(int i=1;i<=LOGN;i++)
{
for(int j=1;j<=n;j++)
{
rmq[j][i]=rmq[j][i-1];
if(j + (1<< (i-1)) <= n)
{
rmq[j][i]=min(rmq[j][i],rmq[j+(1<<(i-1))][i-1]);
}
}
}
while(q--)
{
int l,r;
fin >> l >> r;
int len = p[r-l+1];
fout << min(rmq[l][len],rmq[r-(1<<len)+1][len]) << "\n";
}
}