Pagini recente » Cod sursa (job #3233111) | Cod sursa (job #2121362) | Cod sursa (job #582881) | Cod sursa (job #1953107) | Cod sursa (job #3271935)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("rmq.in");
ofstream fout("rmq.out");
#define cin fin
#define cout fout
int n;
vector<int>mins[20];
vector<int>maxes[20];
int logaritm(int n){
int p=1;
int cnt=0;
while(p<n){
cnt++;
p*=2;
}
if(p==n)return cnt;
else return cnt-1;
}
void rmq(int limit){
//subcsecvente de 2 la i
//pana la n-2^i
for(int i=1;i<=limit;i++){
for(int j=0;j<=n-(1<<i);j++){
mins[i].push_back(min(mins[i-1][j],mins[i-1][j+(1<<(i-1))]));
//maxes[i].push_back(max(maxes[i-1][j],maxes[i-1][j+(1<<(i-1))]));
}
}
}
int main(){
int miau;
cin>>n>>miau;
for(int i=1;i<=n;i++){
int x;
cin>>x;
mins[0].push_back(x);
}
rmq(logaritm(n));
//implementez faza cu numere distincte
while(miau--){
int st,dr;
cin>>st>>dr;
int dist=dr-st+1;
int netrebe=logaritm(dist);
cout<<min(mins[netrebe][st],mins[netrebe][dr-(1<<netrebe)])<<'\n';
}
}