Pagini recente » Cod sursa (job #452346) | Cod sursa (job #1009972) | Cod sursa (job #2077817) | Cod sursa (job #1531767) | Cod sursa (job #2374043)
#include <iostream>
#include <fstream>
using namespace std;
ifstream fin("rmq.in");
ofstream fout("rmq.out");
int a[100005];
int lg[100005];
int rmq[20][100005];
int n,k;
void Read()
{
fin>>n>>k;
for( int i=1; i<=n; ++i )
fin>>a[i];
}
void LOG()
{
int i;
lg[2]=1;
for(i=3; i<=100005; ++i)
lg[i]=lg[i/2]+1;
}
void Precalc()
{
int i,j;
for(i=1; i<=n; ++i)
rmq[0][i]=a[i];
for( i=1; (1 << i)<= n; ++i)
{
for( j=1; j + (1<<i) -1 <= n; ++j)
rmq[i][j]= min( rmq[ i-1 ][ j ], rmq[i-1][j+ (1 << ( i - 1) ) ] );
}
}
void Do()
{
int x,y,lgi;
int logg;
for(int i=1; i<=k; ++i)
{
fin>>x>>y;
lgi= y - x + 1;
logg=lg[lgi];
fout << min( rmq[logg][x], rmq[logg][ y - ( 1<<logg ) + 1 ] )<<"\n";
}
}
int main()
{
Read();
LOG();
Precalc();
Do();
return 0;
}