Pagini recente » Cod sursa (job #697504) | Cod sursa (job #1109316) | Cod sursa (job #1023603) | Cod sursa (job #3168657) | Cod sursa (job #2340204)
#include <fstream>
#include <climits>
using namespace std;
ifstream f("rmq.in");
ofstream g("rmq.out");
int n, v[100001], st[1000001], x, y, m;
int RMQ(int ss, int se, int qs, int qe, int si)
{
if(qs<=ss && qe>=se)
return st[si];
if(qs>se || qe<ss)
return INT_MAX;
int mid=(ss+se)/2;
return min(RMQ(ss, mid, qs, qe, 2*si+1), RMQ(mid+1, se, qs, qe, 2*si+2));
}
int constr(int ss, int se, int si)
{
if(ss==se)
{
st[si]=v[ss];
return v[ss];
}
int mid=(ss+se)/2;
st[si]=min(constr(ss, mid, 2*si+1), constr(mid+1, se, 2*si+2));
return st[si];
}
int main()
{
f>>n>>m;
for(int i=1; i<=n; i++)
f>>v[i];
constr(1, n, 0);
for(int i=1; i<=m; i++)
{
f>>x>>y;
g<<RMQ(1, n, x, y, 0)<<'\n';
}
return 0;
}