Pagini recente » Cod sursa (job #2712374) | Cod sursa (job #2419125) | Cod sursa (job #1719674) | Cod sursa (job #1635301) | Cod sursa (job #1939589)
#include <iostream>
#include <fstream>
using namespace std;
ifstream in("rmq.in");
ofstream out("rmq.out");
int PRE[18][100005];
int LOG2[100005];
int n,m;
void read(){
in>>n>>m;
for(int i=1;i<=n;i++){
in>>PRE[0][i];
}
}
void logs(){
for(int i=2;i<=n;i++){ //! trebe sa inceapa de la 2
LOG2[i]=LOG2[i/2]+1;
}
}
void preprocess(){
logs();
for(int i=1;(1<<i)<=n;i++){ //! 2^n <= n
for(int j=1;j<=n;j++){
PRE[i][j]=min(PRE[i-1][j], PRE[i-1][j+(1<<(i-1))]);
}
}
}
void query(){
int low,hi,nr_elem, log_elem;
for(int i=1;i<=m;i++){
in>>low>>hi;
nr_elem=hi-low+1;
log_elem=LOG2[nr_elem];
out<<min(PRE[log_elem][low],
PRE[log_elem][low+nr_elem-(1<<log_elem)])
//! ^ se misca nr_elem-(1<<log_elem) in dreapta fata de low.
<<"\n";
}
}
int main(){
read();
preprocess();
query();
return 0;
}