Pagini recente » Cod sursa (job #2320532) | Cod sursa (job #2942186) | Cod sursa (job #1802671) | Cod sursa (job #1467949) | Cod sursa (job #1370983)
#include <fstream>
#define Minim(a,b) (a<b? a:b)
#define NMAX 100004
#define INF 0x3f3f3f3f
using namespace std;
int ArbMin[NMAX*4+69] ;
int m,n,val,pos,minim ;
int start,finish ;
void update(int nod,int left,int right)
{
if(left==right)
{
ArbMin[nod]=val ;
return ;
}
int mij;
mij=(left+right)/2 ;
if(pos<=mij)
update(nod*2,left,mij) ;
else
update(nod*2+1,mij+1,right) ;
ArbMin[nod]=Minim(ArbMin[nod*2],ArbMin[2*nod+1]) ;
}
void query(int nod,int left,int right)
{
if(start<=left&&right<=finish)
{
if(ArbMin[nod]<minim)
minim=ArbMin[nod] ;
return ;
}
int mij ;
mij=(left+right)/2 ;
if(start<=mij)
query(nod*2,left,mij) ;
if(mij<finish)
query(nod*2+1,mij+1,right) ;
}
ifstream f("rmq.in") ;
ofstream g("rmq.out") ;
int main()
{
int x ;
f>>n>>m ;
for(int i=1;i<=n;i++)
{
f>>x ;
pos=i ;
val=x ;
update(1,1,n) ;
}
for(int i=1;i<=m;i++)
{
f>>start>>finish ;
minim=INF ;
query(1,1,n) ;
g<<minim<<'\n' ;
}
return 0;
}