Pagini recente » Cod sursa (job #1365351) | Cod sursa (job #2813178) | Cod sursa (job #331964) | Cod sursa (job #1340616) | Cod sursa (job #409310)
Cod sursa(job #409310)
#include <fstream>
#include <vector>
#include <cmath>
#include <iostream>
using namespace std;
int log2(int x) {
int r = 0;
while ((x >> r) != 0) {
r++;
}
return r-1; // returns -1 for x==0, floor(log2(x)) otherwise
}
int main(){
ifstream in("rmq.in");
ofstream out("rmq.out");
int n,m;in>>n>>m;
vector<int> v(n);
for(int i=0;i<n;i++){
in>>v[i];
}
vector<vector<int> > precalc(n,vector<int>(log2(n)+1));
for(int i=0;i<n;i++) precalc[i][0]=i;
for(int j=1;(1<<j)<n;j++){
for(int i=0;i-1+(1<<j)<n;i++){
if(v[precalc[i][j-1]]<v[precalc[i+(1<<(j-1))][j-1]]){
precalc[i][j]=precalc[i][j-1];
}else{
precalc[i][j]=precalc[i+(1<<(j-1))][j-1];
}
}
}
for(int i=0;i<m;i++){
int a,b;in>>a>>b;a--;b--;
int temp=log2(b-a+1);
if(v[precalc[a][temp]]<v[precalc[b-(1<<temp)+1][temp]]){
out<<v[precalc[a][temp]];
}else{
out<<v[precalc[b-(1<<temp)+1][temp]];
}
out<<"\n";
}
}