Pagini recente » Cod sursa (job #3161402) | Cod sursa (job #2603233) | Borderou de evaluare (job #2445962) | Cod sursa (job #475123) | Cod sursa (job #810389)
Cod sursa(job #810389)
#include <cstdio>
#include <vector>
#include <algorithm>
using namespace std;
vector<int> V[17];
int n,m,i,c,j,p,P,L[100010],d,x,y;
int main()
{
freopen("rmq.in","r",stdin);
freopen("rmq.out","w",stdout);
scanf("%d%d",&n,&m);
for(i=0;i<=16;i++)V[i].push_back(0);
for(i=1;i<=n;i++)
{
scanf("%d",&c);
V[0].push_back(c);
}
for(i=1,p=1,P=2;P<=n;i++,p*=2,P*=2)
for(j=1;j+P-1<=n;j++)
V[i].push_back(min(V[i-1][j],V[i-1][j+p]));
for(p=2;p<=n;p*=2)
L[i]=1;
for(i=1;i<=n;i++)
L[i]+=L[i-1];
for(;m;m--)
{
scanf("%d%d",&x,&y);
d=L[y-x+1];
p=1<<d;
printf("%d\n",min(V[d][x],V[d][y-p+1]));
}
return 0;
}