Pagini recente » Cod sursa (job #984249) | Cod sursa (job #2000787) | Cod sursa (job #709882) | Cod sursa (job #1642967) | Cod sursa (job #1535474)
#include <fstream>
using namespace std;
ifstream f("rmq.in");
ofstream g("rmq.out");
int Poz,Val,start,finish,minn,n,m;
int a[100000];
void update(int nod, int left, int right)
{
if(left == right)
{
a[nod] = Val;
return;
}
int mij = (left + right) / 2;
if(Poz <= mij) update(2 * nod,left,mij);
else update(2 * nod + 1,mij + 1,right);
a[nod] = min(a[2 * nod],a[2 * nod + 1]);
}
void query(int nod, int left, int right)
{
if(start <= left && right <= finish)
{
if(minn > a[nod])
minn = a[nod];
return;
}
int mij = (left + right) / 2;
if(start <= mij) query(2 * nod,left,mij);
if(mij < finish) query(2 * nod + 1,mij + 1,right);
}
int main()
{
int x,y;
f >> n >> m;
for(int i = 1; i <= n; i++)
{
f >> x;
Poz = i;
Val = x;
update(1,1,n);
}
for(int i = 1; i <= m; i++)
{
f >> x >> y;
minn = 1 << 30;
start = x;
finish = y;
query(1,1,n);
g << minn << "\n";
}
return 0;
}