Pagini recente » Cod sursa (job #1425210) | Cod sursa (job #2912780) | Cod sursa (job #1801497) | Cod sursa (job #2695645) | Cod sursa (job #3227697)
#include <iostream>
#include <fstream>
#define K 30
#define nMax 100002
using namespace std;
ifstream fin("rmq.in");
ofstream fout("rmq.out");
long long n, q, x, y, a[nMax], m[nMax][K];
int query(int x, int y){
int l = y - x;
int log = 0;
while(1 << (log+1) <= l)
log++;
return min(m[x][log], m[y - (1<<log)+1][log]);
}
void read(){
fin >> n >> q;
for(int i = 0; i < n; i++)
fin >> a[i];
}
void pre(){
int log = 30;
for(int i = 0; i < n; i++)
m[i][0] = a[i];
for(int k = 1; k < log; k++){
for(int i = 0; i + (1 << k) - 1 < n; i++){
m[i][k] = min(m[i][k-1], m[i+(1<<(k-1))][k-1]);
}
}
}
void solve(){
for(int i = 1; i <= q; i++){
fin >> x >> y;
fout << query(x-1, y-1) << '\n';
}
}
int main()
{
read();
pre();
solve();
return 0;
}