Pagini recente » Cod sursa (job #2990098) | Cod sursa (job #1121075) | Cod sursa (job #1987744) | Cod sursa (job #3299329) | Cod sursa (job #3326779)
#include <bits/stdc++.h>
#define ll unsigned long long
using namespace std;
int rmq[18][100001];
ifstream fin("rmq.in");
ofstream fout("rmq.out");
int E[100001],n,m;
int main(){
fin>>n>>m;
for(int i = 1; i <=n; i++){
fin>>rmq[0][i];
}
for(int p = 1; (1<<p)<=n; p++)
for(int i = 1; i<=n; i++){
// creez minimul pe secventa i, i + (1<<(p-1))
int j = i + (1<<(p-1));
rmq[p][i] = rmq[p-1][i];
if(j<=n && rmq[p-1][j] < rmq[p-1][i])
rmq[p][i]=rmq[p-1][j];
}
E[1] = 0;
for(int i = 2; i<=n; i++)
E[i]= 1+ E[i/2];
while(m--){
int st,dr; cin>>st>>dr;
// iau cea mai mare putere a lui 2 mai mica ca (st,dr)
int e = E[dr-st+1];
int len = (1<<e);
fout<<min(rmq[e][st],rmq[e][dr-len+1])<<'\n';
}
return 0;
}