Pagini recente » Cod sursa (job #1955735) | Cod sursa (job #408595) | Cod sursa (job #99009) | Cod sursa (job #1150141) | Cod sursa (job #409327)
Cod sursa(job #409327)
#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(log2(n)+1,vector<int>(n));
for(int i=0;i<n;i++) precalc[0][i]=i;
for(int j=1;(1<<j)<n;j++){
for(int i=0;i-1+(1<<j)<n;i++){
if(v[precalc[j-1][i]]<v[precalc[j-1][i+(1<<(j-1))]]){
precalc[j][i]=precalc[j-1][i];
}else{
precalc[j][i]=precalc[j-1][i+(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[temp][a]]<v[precalc[temp][b-(1<<temp)+1]]){
out<<v[precalc[temp][a]];
}else{
out<<v[precalc[temp][b-(1<<temp)+1]];
}
out<<"\n";
}
}