Pagini recente » Cod sursa (job #1332209) | Cod sursa (job #3296083) | Cod sursa (job #2999953) | Cod sursa (job #1678448) | Cod sursa (job #3321574)
#include <iostream>
#include <fstream>
using namespace std;
ifstream fin ("rmq.in");
ofstream fout ("rmq.out");
int n,m;
int v[100001];
int log[100001];
int rmq[100001][21];
int main()
{
fin>>n>>m;
int p=1, c =0 ;
for(int i=1;i<=n;i++){
if(i==p*2){
p*=2;
c++;
}
log[i] = c;
}
for(int i=1;i<=n;i++){
fin>>v[i];
rmq[i][0] = v[i];
}
//implementare rmq
p =2;
for(int i=1;p<=n;i++){
for(int j=p;j<=n;j++){
rmq[j][i] = min(rmq[j][i-1], rmq[j-p/2][i-1]);
}
p*=2;
}
int l, r,len,pow;
for(int i=1;i<=m;i++){
fin>>l>>r;
len=r-l+1;
p = log[len];
pow=(1<<p);
fout<<min(rmq[l+pow-1][p], rmq[r][p])<<'\n';
}
return 0;
}