Pagini recente » Cod sursa (job #1636882) | Cod sursa (job #979531) | Cod sursa (job #1666890) | Cod sursa (job #2307008) | Cod sursa (job #2178959)
#include <iostream>
#include <fstream>
using namespace std;
int a[300005],n,m,N=1;
void rmq()
{
for(int i=N-1;i>0;i--)
{
a[i]=min(a[2*i],a[i*2+1]);
}
}
int Query(int p, int x, int y, int st, int dr)
{
if(x==st && y==dr)
return a[p]; //man aici e elementul nu pozitia lui(adica p-poz) elementul e a[p]
else
{
int middle=(st+dr)/2;
if(y<=middle) return Query(2*p,x,y,st,middle);
if(x>=middle+1) return Query(2*p+1,x,y,middle+1,dr);
return min(Query(2*p,x,middle,st,middle),Query(2*p+1,middle+1,y,middle+1,dr));
}
}
void Afisare()
{
for(int i=1;i<=2*N-1;i++)
cout<<a[i]<<" ";
}
int main()
{
int i,x,y;
ifstream fin("rmq.in");
ofstream fout("rmq.out");
fin>>n>>m;
while(N<n)
N*=2;
for(i=1;i<2*N;i++)
a[i]=100005;
for(i=N;i<N+n;i++)
{
fin>>a[i];
}
rmq();
for(i=1;i<=m;i++)
{
fin>>x>>y;
fout<<Query(1,x,y,1,N)<<"\n";
}
fin.close();
fout.close();
return 0;
}