Pagini recente » Cod sursa (job #1828007) | Borderou de evaluare (job #2195280) | Cod sursa (job #1464188) | Cod sursa (job #1478871) | Cod sursa (job #1938958)
#include <fstream>
using namespace std;
ifstream fin("rmq.in");
ofstream fout("rmq.out");
int n,m,a[300005],narb;
inline int query(int p,int x,int y,int st,int dr)
{
if(x==st && y==dr) return a[p];
int mij=(st+dr)/2;
if(y<=mij)
return query(2*p,x,y,st,mij);
if(x>mij)
return query(2*p+1,x,y,mij+1,dr);
return min( query(2*p,x,mij,st,mij) , query (2*p+1,mij+1,y,mij+1,dr) );
}
int main()
{ fin>>n>>m;
narb=1;
int i,x,y;
while(narb<n) narb*=2;
for(i=1;i<=n;++i)
fin>>a[narb+i-1];
for(i=narb-1;i>=1;--i)
a[i]=min(a[i*2],a[i*2+1]);
for(i=1;i<=m;++i)
{ fin>>x>>y;
fout<<query(1,x,y,1,narb)<<"\n";
}
return 0;
}