Pagini recente » Cod sursa (job #184158) | Cod sursa (job #2763977) | Cod sursa (job #2196606) | Cod sursa (job #307235) | Cod sursa (job #2500319)
#include<bits/stdc++.h>
#define NMAX 100001
#define LOGMAX 20
using namespace std;
ifstream fin("rmq.in");
ofstream fout("rmq.out");
int sparse_table[NMAX][LOGMAX],n,v[NMAX];
void precalc(){
int i,j,mid;
for(i=0;i<n;i++)
sparse_table[i][0]=v[i];
for(j=1;(1<<j)<=n;j++){
for(i=0;i<=n-(1<<j);i++){
mid=(1<<j)/2;
sparse_table[i][j]=min(sparse_table[i][j-1],sparse_table[i+mid][j-1]);
}
}
}
int pmax(int x,int& pw){
int p=1; pw=-1;
while(p<=x){
p*=2;
pw++;
}
return p/2;
}
int main()
{
ios_base::sync_with_stdio(false);
int m,i,a,b,p;
fin>>n>>m;
for(i=0;i<n;i++)
fin>>v[i];
precalc();
for(i=0;i<m;i++){
fin>>a>>b; a--; b--;
int k=pmax(abs(a-b)+1,p);
fout<<min(sparse_table[a][p],sparse_table[b-k+1][p])<<'\n';
}
return 0;
}