Pagini recente » Cod sursa (job #2685201) | Cod sursa (job #186030) | Cod sursa (job #353615) | Cod sursa (job #672683) | Cod sursa (job #1372860)
#include <iostream>
#include <fstream>
#define nmax 100004
#define inf 100004
using namespace std;
int T[4*nmax],n,m,x,y,sol;
ifstream f("rmq.in");
ofstream g("rmq.out");
int min(int a, int b)
{
if (a<b) return a;
return b;
}
//arbori de intervale
void Update(int i, int st, int dr)
{
if (st==dr)
{
T[i]=y;
return;
}
int mid=(st+dr)/2;
if (x<=mid) Update(2*i, st, mid); // st
else Update(2*i+1, mid+1, dr); //dr
T[i]=min(T[2*i], T[2*i+1]);
}
void Search(int i, int st , int dr)
{
if (x<=st && dr <=y)
{
sol=min(sol,T[i]);
return;
}
int mid=(st+dr)/2;
if (x<=mid) Search(2*i, st, mid); // st
if (mid < y) Search(2*i+1, mid+1, dr); //dr
}
int main()
{
f >> n >>m;
for (int i=1; i<=n; i++)
{
f >>y;
x=i;
Update(1,1,n);
}
for(int i=1; i<=m; i++)
{
f >> x >> y;
sol=inf;
Search(1,1,n);
g << sol << "\n";
}
f.close();
g.close();
return 0;
}