Pagini recente » Cod sursa (job #953518) | Cod sursa (job #1209813) | Cod sursa (job #2607921) | Cod sursa (job #2657278) | Cod sursa (job #820457)
Cod sursa(job #820457)
//Vasilut
#include<fstream>
#include<cmath>
#define NN 100001
#define LOGN 19
using namespace std;
ofstream out("rmq.out");
ifstream in("rmq.in");
int a[NN][LOGN],n,m;
void read();
void RMQ();
void write_sol();
int main()
{
read();
RMQ();
write_sol();
return 0;
}
void read()
{
in>>n>>m;
for(int i=1;i<=n;i++)
in>>a[i][0];
}
void RMQ()
{
int k=0;// lung de interval a[i][j] intervalul care porneste de la poz i si are lungimea ( 1 << j )
while ( ( 1 << k ) <=n )
++k;
--k;
int i,j;
for(j=1;j<=k;j++)
for(i=1;i<=n;i++)
{
a[i][j]=a[i][j-1];
if ( i + ( 1 << ( j - 1 ) ) <=n )
a[i][j] = min ( a[i][j] ,a[ i + (1 << (j - 1 ) ) ] [j-1] );
}
}
void write_sol()
{
for(int x,y ;m ;--m)
{
in>>x>>y;
if ( x == y )
out<<a[x][0]<<" "<<'\n';
else
{
int k=floor( log( y -x ) / log ( 2 ) ) ;
out<<min ( a[x][k] , a[ y - (1 << k ) +1 ] [k] ) <<'\n';
}
}
}