Pagini recente » Cod sursa (job #2590122) | Cod sursa (job #1474716) | Cod sursa (job #2643052) | Cod sursa (job #1131914) | Cod sursa (job #3155857)
#include "iostream"
#include "algorithm"
#include <fstream>
using namespace std;
ifstream fin("rmq.in");
ofstream fout("rmq.out");
int n, q;
int a[20][100001], e[100001], puteri[20];
int main(){
fin>>n>>q;
for(int i=1; i<=n; i++){
fin>>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++){
fin>>st>>dr;
L=dr-st+1;
fout<<min(a[e[L]][st], a[e[L]][dr-puteri[e[L]]+1])<<'\n';
}
return 0;
}