Pagini recente » Rezultatele filtrării | Rezultatele filtrării | Rezultatele filtrării | Rezultatele filtrării | Cod sursa (job #3213736)
#include <bits/stdc++.h>
#define eb emplace_back
#define pii pair<int, int>
#define tpl tuple<int, int, int>
#define oo INT_MAX >> 1
#define ll long long
using namespace std;
const string fn("rmq");
ifstream in(fn + ".in");
ofstream out(fn + ".out");
#define cin in
#define cout out
const int MAX=1e5;
int n,k,v[MAX+5],Log[MAX+5],rmq[18][MAX+5];
int query(int l,int r)
{
int k=Log[r-l+1];
return min(rmq[k][l+(1<<k)-1],rmq[k][r]);
}
int main()
{
cin>>n>>k;
cin>>v[1];
Log[1]=0;
rmq[0][1]=v[1];
for(int i=2;i<=n;i++)
cin>>v[i],rmq[0][i]=v[i],Log[i]=Log[i/2]+1;
for(int i=1;(1<<i)<=n;i++)
for(int j=(1<<i);j<=n;j++)
{
int k=(1<<(i-1));
rmq[i][j]=min(rmq[i-1][j],rmq[i-1][j-k]);
}
while(k--)
{
int l,r;
cin>>l>>r;
cout<<query(l,r)<<'\n';
}
return 0;
}