Pagini recente » Cod sursa (job #3305384) | Cod sursa (job #2290392) | Cod sursa (job #1767602) | Cod sursa (job #1220441) | Cod sursa (job #3339767)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("rmq.in");
ofstream fout("rmq.out");
int main(){
int n,m;
fin>>n>>m;
vector<int> v(n+1);
vector<int> len(n+1);
int lastpow = 2;
len[1] = 0;
len[2] = 1;
for(int i=3;i<=n;i++){
len[i] = len[i-1];
if(i == lastpow*2){
lastpow *= 2;
len[i]++;
}
}
vector<vector<int>> rmq(n+1,vector<int>(len[n]+1));
for(int i=1;i<=n;i++){
fin>>v[i];
rmq[i][0] = v[i];
}
int cnt = 1;
for(int sz=2;sz<=n;sz*=2){
for(int i=1;i+sz-1<=n;i++)
rmq[i][cnt] = min(rmq[i][cnt-1],rmq[i+sz/2][cnt-1]);
cnt++;
}
for(int i=1;i<=m;i++){
int l,r;
fin>>l>>r;
if(l>r)
swap(l,r);
int p = len[r-l];
fout<<min(rmq[l][p],rmq[r-(1<<p)+1][p])<<"\n";
}
}