Pagini recente » Cod sursa (job #2037826) | Cod sursa (job #504536) | Cod sursa (job #2298199) | Cod sursa (job #1697593) | Cod sursa (job #2469025)
#include <bits/stdc++.h>
#define Dmax 17
using namespace std;
ifstream fin ("rmq.in");
ofstream fout ("rmq.out");
struct cv
{
int v[Dmax];
};
vector < cv > o;
vector < int > v;
int n,q;
void citesc ();
void rmq ();
int main()
{
citesc();
}
void citesc ()
{
int x, i1 ,i2, k, lg;
fin >> n >> q;
for ( int i = 1 ; i <= n; i++)
{
fin >> x;
v.push_back (x) ;
}
rmq () ;
for ( int i =1 ; i <= q; i++)
{
fin>> i1 >> i2 ;
lg = (i2 - i1) +1 ;
i1-- ;
i2--;
k = int ( log2 (lg) );
fout << min ( v[o[i1].v[k]], v[o[i1+lg- (1 << k)].v[k]] );
}
fin.close();
}
void rmq ()
{
for ( int i = 0; i < n; i++ )
o[i].v[0] = i;
for ( int j = 1; (1<<j)<=n; j++ )
{
for ( int i = 0; i + (1<<j)-1< n; i++)
{
if ( o[i].v[j-1] < o[ i+ (1<<j) -1].v[j-1] )
o[i].v[j] = o[i].v[j-1];
else o[i].v[j] = o[ i+ (1<<j) -1 ].v[j-1];
}
}
}