Pagini recente » Cod sursa (job #719328) | Cod sursa (job #411198) | Cod sursa (job #2811304) | Cod sursa (job #377378) | Cod sursa (job #1955665)
#include <fstream>
#include <cstdio>
#define NMAX 100002
#define inf 1<<30
using namespace std;
ofstream cout("rmq.out");
int Arb[NMAX*3];
int pos,x,a,b,n,m;
inline void Update(int nivel, int s, int d)
{
int mijl;
if(s==d) Arb[nivel]=x;
else
{
mijl=(s+d)/2;
if(pos<=mijl) Update(nivel*2,s,mijl);
else Update(nivel*2+1,mijl+1,d);
Arb[nivel]=min(Arb[nivel*2],Arb[nivel*2+1]);
}
}
inline int Query(int nivel, int s, int d)
{
int sol1=inf,sol2=inf,mijl;
if(a<=s && d<=b) return Arb[nivel];
else
{
mijl=(s+d)/2;
if(a<=mijl) sol1=Query(nivel*2,s,mijl);
if(b>mijl) sol2=Query(nivel*2+1,mijl+1,d);
return min(sol1,sol2);
}
}
int main()
{
int i;
FILE*cin=freopen("rmq.in","r",stdin);
scanf("%d%d",&n,&m);
for(i=1; i<=n; i++) Arb[i]=inf;
for(pos=1; pos<=n; pos++)
{
scanf("%d",&x);
Update(1,1,n);
}
for(i=1; i<=m; i++)
{
scanf("%d%d",&a,&b);
cout<<Query(1,1,n)<<'\n';
}
return 0;
}