Pagini recente » Cod sursa (job #2254154) | Cod sursa (job #2828595) | Cod sursa (job #2442912) | Cod sursa (job #2451004) | Cod sursa (job #2655561)
#include<iostream>
#include<fstream>
using namespace std;
ifstream in("rmq.in");
ofstream out("rmq.out");
int num_values,num_queries,values[1000000];
int rmq[1000000][30];
int log2[100000];
void read(){
in>>num_values>>num_queries;
for(int i=0;i<num_values;i++)
in>>values[i];
}
void preprocess(){
log2[1]=0;
for(int i=2;i<=num_values;i++){
log2[i]=1+log2[i/2];
}
for(int i=0;i<num_values;i++){
rmq[i][0]=values[i];
}
for(int i=1;(1<<i)<=num_values;i++){
int pw=1<<i;
int lpw=1<<(i-1);
for(int k=0;k<=num_values-pw;k++){
rmq[k][i]=min(rmq[k][i-1],rmq[k+lpw][i-1]);
}
}
}
int query(int left, int right){
int dist=right-left+1;
int lg=log2[dist];
return min(rmq[left][lg],rmq[right-(1<<(lg))+1][lg]);
}
int main(){
read();
preprocess();
int a,b;
for(int i=0;i<num_queries;i++){
in>>a>>b;
out<<query(a-1,b-1)<<'\n';
}
return 0;
}