Pagini recente » Cod sursa (job #1904579) | Cod sursa (job #404299) | Cod sursa (job #854258) | Cod sursa (job #1571475) | Cod sursa (job #3155856)
#include "iostream"
#include "algorithm"
using namespace std;
int n, q;
int a[20][100001], e[100001], puteri[20];
int main(){
cin>>n>>q;
for(int i=1; i<=n; i++){
cin>>a[0][i];
}
int aux=1, putere=0;
for(int i=1; i<=n; i++){
if(i>=aux*2) {
aux *= 2;
putere++;
}e[i]=putere;
}
aux=1;
for(int i=0; i<=putere; i++){
puteri[i]=aux;
aux*=2;
}
aux=2, putere=1;
while(aux<=n){
for(int i=1; i<=n; i++){
if(i+aux/2<=n)
a[putere][i]=min(a[putere-1][i], a[putere-1][i+aux/2]);
else a[putere][i]=a[putere-1][i];
}
aux*=2;
putere++;
}
/*
for(int i=1; i<=19; i++){
for(int j=1; j<=n; j++){
cout<<a[i][j]<<' ';
}
cout<<endl;
}
*/
/*
for(int i=1; i<=n; i++){
cout<<e[i]<<' ';
}
*/
int st, dr, L;
for(int i=1; i<=q; i++){
cin>>st>>dr;
L=dr-st+1;
cout<<min(a[e[L]][st], a[e[L]][dr-puteri[e[L]]+1])<<'\n';
}
return 0;
}