Pagini recente » Cod sursa (job #2218366) | Cod sursa (job #1643963) | Cod sursa (job #2889716) | Cod sursa (job #976632) | Cod sursa (job #2812101)
#include <iostream>
#include <fstream>
using namespace std;
ifstream in("rmq.in");
ofstream out("rmq.out");
const int NMAX=100002;
long long RMQ[20][NMAX];
//int put_max_2[100000]; /// puterea max a lui 2 dintr-un numar
/*
void Update( int st, int dr, int k ){
int put_2 = put_max_2[dr-st+1];
RMQ[put_2][st] = max( RMQ[put_2][st], k );
RMQ[put_2][dr - ( 1<<put_2) + 1] = max( RMQ[put_2][dr - (1<<put_2) + 1], k );
} */
void Propagate(int n){
for(int i=1; i<=20; i++){
for(int j=1; j + (1<<i) -1 <= n; j++){
int l=(1<<(i-1));
RMQ[i][j] = min( RMQ[i-1][j], RMQ[i-1][j+l] );
//RMQ[i-1][j + (1<<(i-1))] = max( RMQ[i-1][j+(1<<(i-1))], RMQ[i][j] );
}
}
}
int Query( int poz ){
return RMQ[0][poz];
}
/*
int rmq[NMAX][LGMAX];
, n;
void ComputeRMQ(){
for(int i=0; i<n; i++)
rmq[0][i]=v[i];
for(int i=1; i<LGMAX; i++){
for(int j=0; j+(1<<i)<=n; j++){
rmq[i][j]=max( rmq[i][j], rmq[i-1][j+( 1<<(i-1) ) ] );
}
}
} */
long long v[NMAX];
long long lg[NMAX];
int main()
{
int n, m;
in>>n>>m;
for(int i=1; i<=n; i++){
in>>v[i];
RMQ[0][i]=v[i];
}
lg[1]=0;
for(int i=2; i<=n; i++)
lg[i]=lg[i/2]+1;
Propagate(n);
int st, dr;
for(int i=0; i<m; i++){
in>>st>>dr;
long long l = lg[ dr-st+1 ];
long long rez = dr-st+1 - (1<<l);
out<<min( RMQ[1][st], RMQ[1][st+rez] )<<'\n';
}
return 0;
}