Pagini recente » Cod sursa (job #347943) | Cod sursa (job #1279552) | Cod sursa (job #237769) | Cod sursa (job #173397) | Cod sursa (job #2183071)
#include <bits/stdc++.h>
using namespace std;
ifstream in("rmq.in");
ofstream out("rmq.out");
int n,m, val, a[400005], lef, rig;
void update( int nod, int st, int dr, int poz)
{
if( st== dr )
{
a[nod] = val;
return;
}
int mid = ( st + dr ) /2;
if( poz<=mid ) update( nod*2, st, mid,poz);
else update( nod*2+1, mid+1, dr, poz);
a[nod] = min( a[nod*2], a[2*nod+1]);
}
void qwery( int nod, int st, int dr )
{
if( st >= lef && dr <= rig )
{
val = min( val , a[nod]);
return ;
}
int mid = (st+dr) /2;
if( lef <=mid ) qwery(nod*2, st, mid);
if( rig > mid ) qwery(nod*2+1, mid+1, dr);
}
int main()
{
ios::sync_with_stdio(0);
in >> n >> m;
int x,y;
for(int i=1; i<=n; i++)
{
in >> x;
val = x;
update(1,1,n,i);
}
for(int i=1; i<=m; i++)
{
in >> x >> y;
lef = x;
rig = y;
val = 1<<30;
qwery(1,1,n);
out << val << '\n';
}
return 0;
}