Pagini recente » Cod sursa (job #3292977) | Cod sursa (job #551962) | Cod sursa (job #807020) | Cod sursa (job #3259681) | Cod sursa (job #3289559)
#include <bits/stdc++.h>
using namespace std;
int p[20];
int v[100005][17];
int main()
{
ifstream cin("rmq.in");
ofstream cout("rmq.out");
int n,q,st,dr;
cin>>n>>q;
p[0]=1;
for(int i=1;i<=17;++i)
{
p[i]=p[i-1]*2;
}
for(int i=1;i<=n;++i)
{
cin>>v[i][0];
}
for(int pt=1;pt<=17;++pt)
{
for(int i=1;(i+p[pt]-1)<=n;++i)
{
v[i][pt]=min(v[i][pt-1],v[i+p[pt-1]][pt-1]);
}
}
for(int i=1;i<=q;++i)
{
cin>>st>>dr;
int l=dr-st+1;
int s=0,d=17,mij,in=-1;
while(s<=d)
{
mij=(s+d)/2;
if(p[mij]<=l)
{
in=mij;
s=mij+1;
}
else
{
d=mij-1;
}
}
//cout<<v[st][in]<<" "<<v[dr-p[in]+1][in]<<"\n";
cout<<min(v[st][in],v[dr-p[in]+1][in])<<"\n";
}
return 0;
}