Pagini recente » Cod sursa (job #1486994) | Cod sursa (job #3190296) | Cod sursa (job #2164755) | Cod sursa (job #2959830) | Cod sursa (job #3177855)
#include <bits/stdc++.h>
std::ifstream h("rmq.in");
std::ofstream g("rmq.out");
const int MLOG=18;
const int SIZE=100000;
int v[SIZE+1];
int t[SIZE+1][MLOG+1];
inline int f(int a, int b){
return a<b ? a : b;
}
inline int log2(int x){
int r=0;
while(x>1){
x/=2;
++r;
}
return r;
}
void build(int n){
int p=0,i;
for(i=1;i<=n;i++)
t[i][0]=v[i];
for(p=1;p<=MLOG;p++)
for(i=1;i+(1<<p)-1<n;i++)
t[i][p]=f(t[i][p-1],t[i+(1<<(p-1))][p-1]);
}
int query(int left, int right){
int l, log;
l=right-left+1;
log=log2(l);
return f(t[left][log],t[right-(1<<log)+1][log]);
}
int main(){
int n,q;
h>>n>>q;
for(int i=1;i<=n;i++)
h>>v[i];
build(n);
while(q--){
int a, b;
h>>a>>b;
g<<query(a,b)<<'\n';
}
return 0;
}