Pagini recente » Cod sursa (job #716767) | Cod sursa (job #1491729) | Cod sursa (job #1158581) | Cod sursa (job #803357) | Cod sursa (job #409319)
Cod sursa(job #409319)
#include <fstream>
#include <vector>
#include <cmath>
#include <iostream>
using namespace std;
struct tabel{
vector<int> log;
tabel(int n){
log=vector<int>(n+1,0);
for(int i=2;i<=n;i++) log[i]=log[i/2]+1;
}
int operator()(int x){
return log[x];
}
};
int main(){
ifstream in("rmq.in");
ofstream out("rmq.out");
int n,m;in>>n>>m;
vector<int> v(n);tabel log2(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";
}
}