Pagini recente » Cod sursa (job #2433538) | Cod sursa (job #1226244) | Cod sursa (job #2745041) | Cod sursa (job #1389667) | Cod sursa (job #541439)
Cod sursa(job #541439)
#include <fstream>
using namespace std;
ifstream fin("rmq.in");
ofstream fout("rmq.out");
#define DIM 100001
int m, n;
long long arb[4*DIM];
int inc, sf, val, poz;
long long minim;
void Read();
void Update(int nod, int st, int dr);
void Query(int nod, int st, int dr);
int main()
{
Read();
int x, y, v;
for ( int i = 1; i <= m; ++i )
{
fin >> x >> y;
minim = 100001;
inc = x;
sf = y;
Query (1, 1, n);
fout << minim << '\n';
}
}
void Read()
{
int x;
fin >> n >> m;
for ( int i = 1; i <= n; ++i )
{
fin >> x;
poz = i, val = x;
Update(1, 1, n);
}
}
void Update(int nod, int st, int dr)
{
if (st == dr)
{
arb[nod] = val;
return;
}
int mij = (st + dr)/2;
if ( poz <= mij )
Update( 2*nod, st, mij);
else
Update( 2*nod+1, mij+1, dr);
arb[nod] = min( arb[2*nod], arb[2*nod+1] );
}
void Query(int nod, int st, int dr)
{
if ( inc <= st && dr <= sf )
{
if ( minim > arb[nod] )
minim = arb[nod];
return;
}
int mij = (st+dr)/2;
if ( inc <= mij )
Query( 2*nod, st, mij);
if ( mij < sf )
Query( 2*nod+1, mij+1, dr);
}