Pagini recente » Cod sursa (job #2641799) | Cod sursa (job #50805) | Cod sursa (job #2776289) | Cod sursa (job #2162174) | Cod sursa (job #2087157)
#include <fstream>
using namespace std;
ifstream cin("rmq.in");
ofstream cout("rmq.out");
const int nm=100000,nm2=2*(131072+100);
int v[nm+5];
int sol[nm2+5];
int n,m;
int p,a,b;
int len;
void build(int st,int dr,int poz)
{
if(st==dr)
{
sol[poz]=v[st];
return;
}
int med=(st+dr)/2;
build(st,med,2*poz+1);
build(med+1,dr,2*poz+2);
sol[poz]=min(sol[2*poz+1],sol[2*poz+2]);
}
int slove(int a,int b,int st,int dr,int poz)
{
if(a<=st and dr<=b)
return sol[poz];
if(dr<a or b<st)
return 1e9;
int med=(st+dr)/2;
return min(slove(a,b,st,med,2*poz+1),slove(a,b,med+1,dr,2*poz+2));
}
int main()
{
cin>>n>>m;
for(int i=0;i<n;i++)
cin>>v[i];
for(int i=0;i<=nm2;i++)
sol[i]=-1;
build(0,n-1,0);
for(int i=0;i<=nm2;i++)
if(sol[i]==-1)
{
len=i;
break;
}
for(int i=1;i<=m;i++)
{
int a,b;
cin>>a>>b;
cout<<slove(a-1,b-1,0,n-1,0)<<"\n";
}
return 0;
}
/**
**/