Pagini recente » Monitorul de evaluare | Statistici Corpaci Daria (dariaana1504) | Profil StarGold2 | Statistici agagagtrate (boss1999) | Cod sursa (job #1698843)
#include<cstdio>
#include<cmath>
using namespace std;
int n,v[100023],bucata[100023];
int min(int a,int b)
{
if(a<b) return a;
return b;
}
int main()
{
freopen ("rmq.in","r",stdin);
freopen ("rmq.out","w",stdout);
scanf("%d", &n);
for(int i=1;i<=n;i++) bucata[i]=1000000000;
for(int i=1;i<=n;i++) scanf("%d",&v[i]);
int buc=1,mar=sqrt(n);
for(int i=1;i<=n;i++)
{
if((i-1)%mar==0&&i!=1) ++buc;
bucata[buc]=min(bucata[buc],v[i]);
}
int m;
scanf("%d",&m);
for(int i=1;i<=m;i++)
{
int a,b,sum=1000000000;
scanf("%d%d",&a,&b);
for(int j=a;j<=b;j++)
{
if((j-1)%mar==0&&j+mar<=b&&j!=1)
{
sum=min(sum,bucata[(j-1)/mar +1]);
j+=mar-1;
}
else sum=min(sum,v[j]);
}
printf("\n%d\n",sum);
}
}