Pagini recente » Cod sursa (job #3305253) | Cod sursa (job #191895) | Cod sursa (job #3323443) | Cod sursa (job #3298142) | Cod sursa (job #3350240)
#include <bits/stdc++.h>
#define ll long long
using namespace std;
ifstream fin("rmq.in");
ofstream fout("rmq.out");
#define LOGMAX 17
#define NMAX 100005
int n,m, a[NMAX];
int rmq[NMAX][LOGMAX];
void citire(){
fin >> n >> m;
for(int i = 1; i<=n; i++){
fin >> a[i];
}
}
void preprocess(){
for(int i = 1; i<=n; i++){
rmq[i][0] = i;
}
for(int j = 1; j<LOGMAX; j++){
for(int i = 1; i + (1<<j)-1 <= n; i++){
if(a[rmq[i][j-1]] <= a[rmq[i+(1<<(j-1))][j-1]]) rmq[i][j] = rmq[i][j-1];
else rmq[i][j] = rmq[i+(1<<(j-1))][j-1];
}
}
}
void queries(){
while(m--){
int l,r;
fin >> l >> r;
int j = (int)log2(r-l+1);
if(a[rmq[l][j]] <= a[rmq[r-(1<<j)+1][j]]) fout << a[rmq[l][j]] << '\n';
else fout << a[rmq[r-(1<<j)+1][j]] << '\n';
}
}
int main(){
citire();
preprocess();
queries();
return 0;
}