Pagini recente » Cod sursa (job #2340250) | Cod sursa (job #2790631) | Cod sursa (job #348993) | Cod sursa (job #1128282) | Cod sursa (job #991875)
Cod sursa(job #991875)
#include <fstream>
using namespace std;
int n;
int v[100005];
int din[17][100005];
inline int minim(int a,int b)
{
if(a<b)
return a;
return b;
}
int logaritm(int x)
{
int p=0;
while(x>1)
{
x/=2;
p++;
}
return p;
}
void precalc()
{
int i,j,ln=logaritm(n);
for(i=1;i<=n;i++)
din[0][i]=v[i];
for(i=1;i<=ln;i++)
for(j=1;j<=n;j++)
if((j+(1<<i)-1)<=n)
din[i][j]=minim(din[i-1][j],din[i-1][j+(1<<(i-1))]);
}
int main()
{
ifstream cin("rmq.in");
ofstream cout("rmq.out");
int i,m=0;
cin>>n>>m;
for(i=1;i<=n;i++)
cin>>v[i];
precalc();
//int j,ln=logaritm(n);
//for(i=0;i<=ln;i++)
//{
//for(j=1;j<=n;j++)
// cout<<din[i][j]<<' ';
//cout<<endl;
//}
int a,b,l;
cin>>m;
for(i=0;i<m;i++)
{
cin>>a>>b;
l=logaritm(b-a+1);
cout<<minim(din[l][a],din[l][b-(1<<l)+1])<<'\n';
}
cin.close();
cout.close();
return 0;
}