Pagini recente » Cod sursa (job #953300) | Cod sursa (job #1849893) | Cod sursa (job #371691) | Cod sursa (job #2339249) | Cod sursa (job #832280)
Cod sursa(job #832280)
#include <iostream>
#include <fstream>
using namespace std;
ifstream in("rmq.in");
ofstream out("rmq.out");
inline int minim(int a,int b)
{
return a<b? a:b;
}
int x[111111],w[17][111111],l[111111];
int main()
{
int n,m,i,j,p,a,b,k;
in>>n>>m;
for(i=1;i<=n;++i)
{
in>>x[i];
w[0][i]=x[i];
}
p=2;
for(i=1;p<=n;++i)
{
for(j=1;j<=n-p+1;++j)
{
w[i][j]=minim(w[i-1][j],w[i-1][j+p/2]);
}
p*=2;
}
p=1;
k=0;
for(i=1;i<=n;++i)
{
if(p*2<=i)
{
p*=2;
++k;
}
l[i]=k;
}
for(i=1;i<=m;++i)
{
in>>a>>b;
out<<minim(w[l[b-a+1]][a],w[l[b-a+1]][b-(1<<l[b-a+1])+1])<<"\n";
}
return 0;
}