Pagini recente » Cod sursa (job #1294392) | Cod sursa (job #1413872) | Cod sursa (job #1570328) | Cod sursa (job #2684352) | Cod sursa (job #221748)
Cod sursa(job #221748)
#include <fstream>
using namespace std;
ifstream in("rmq.in");
ofstream out("rmq.out");
int n,x,y,pos,val,minim,start,finish,arb[500000]; long m;
int min(int a,int b)
{if(a>b) return b;
return a;}
void update(int nod,int left,int right)
{if(left==right) {arb[nod]=val;return;}
int div=(left+right)/2;
if(pos<=div)update(2*nod,left,div);
else update(2*nod+1,div+1,right);
arb[nod]=min(arb[2*nod],arb[2*nod+1]);
}
void query(int nod,int left,int right)
{if(start<=left && right<=finish) {if(minim>arb[nod])minim=arb[nod];return;}
int div=(left+right)/2;
if(start<=div)query(2*nod,left,div);
if(div<right) query(2*nod+1,div+1,right);
}
int main()
{ in>>n>>m;
for(int i=1;i<=n;i++)
{pos=i;in>>val;update(1,1,n);}
for(;m;m--)
{in>>x>>y;
start=x;finish=y;query(1,1,n);
out<<minim<<'\n';}
return 0;
}