Pagini recente » Cod sursa (job #2763287) | Cod sursa (job #2241081) | Cod sursa (job #309785) | Cod sursa (job #1407694) | Cod sursa (job #1960911)
#include <bits/stdc++.h>
using namespace std;
ifstream fin ("rmq.in");
ofstream fout("rmq.out");
const int LOG_MAX = 100000+ 5;
int L[LOG_MAX];
int n , q;
int rmq[21][LOG_MAX];
void calc_log(){
for(int i = 2; i<LOG_MAX-1; ++i)
L[i] = 1 + L[i/2];
}
void calc_rmq(){
for(int pd = 1; pd<=L[n]; ++pd){
for(int i = 1; i<=(n-(1<<pd)+1); ++i)
rmq[pd][i] = min (rmq[pd-1][i], rmq[pd-1][i+(int)pow(2,pd-1)]);
}
}
int main(){
calc_log();
fin >> n >> q;
int cn = n;
for(int i = 1; i<=n; ++i){
fin >> rmq[0][i];
}
calc_rmq();
// for(int pd = 0; pd<=10; pd++){
// for(int i = 1; i<=cn; ++i)
// cout<<rmq[pd][i]<<" ";
// cout<<"\n";
// }
while(q--){
int a, b; fin >> a >> b;
int bucata = L[b-a+1];
fout<< min(rmq[bucata][a], rmq[bucata][b-(1<<bucata)+1] ) << "\n";
}
return 0;
}