Pagini recente » Cod sursa (job #733074) | Cod sursa (job #404336) | Monitorul de evaluare | Cod sursa (job #574529) | Cod sursa (job #3301613)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("rmq.in");
ofstream fout("rmq.out");
const int nmax=1e5+3;
int sp[nmax][18];
int bust[nmax];
int main()
{
int n, q;
fin>>n>>q;
for(int i=1; i<=n; i++)
fin>>sp[i][0];
for(int j=1; j<18; j++)
{
for(int i=1; i<=n-(1<<j)+1; i++)
sp[i][j]=min(sp[i][j-1], sp[i+(1<<(j-1))][j-1]);
}
for(int i=2; i<nmax; i++)
bust[i]=bust[i/2]+1;
while(q--)
{
int a, b, aux;
fin>>a>>b;
aux=bust[b-a+1];
fout<<min(sp[a][aux], sp[b-(1<<aux)+1][aux])<<'\n';
}
return 0;
}