Pagini recente » Cod sursa (job #87283) | Cod sursa (job #2598696) | Cod sursa (job #927703) | Cod sursa (job #118209) | Cod sursa (job #2559018)
#include <fstream>
using namespace std;
ifstream f("rmq.in");
ofstream g("rmq.out");
const int NMAX = 100005;
const int INF = (int)1e18;
int N,M;
int St[4*NMAX],Dr[4*NMAX],Minim[4*NMAX];
void Build(int nod,int st,int dr)
{
St[nod]=st;
Dr[nod]=dr;
if(st==dr){
f>>Minim[nod];
return;
}
int mij=(st+dr)/2;
Build(2*nod,st,mij);
Build(2*nod+1,mij+1,dr);
Minim[nod]=min(Minim[2*nod],Minim[2*nod+1]);
}
int Cauta_Minim(int nod,int st,int dr)
{
if(St[nod]>dr || Dr[nod]<st){
return INF;
}
if(st<=St[nod] && Dr[nod]<=dr){
return Minim[nod];
}
int r1=Cauta_Minim(2*nod,st,dr);
int r2=Cauta_Minim(2*nod+1,st,dr);
return min(r1,r2);
}
int main()
{
f>>N>>M;
Build(1,1,N);
while(M){
int a,b;
f>>a>>b;
g<<Cauta_Minim(1,a,b)<<'\n';
M--;
}
f.close();
g.close();
return 0;
}