Pagini recente » Cod sursa (job #529328) | Cod sursa (job #1285097) | Cod sursa (job #141684) | Cod sursa (job #738409) | Cod sursa (job #3290405)
#include <fstream>
using namespace std;
ifstream cin ("rmq.in");
ofstream cout ("rmq.out");
int r[100001][18];
int E[100001];
int v[100001];
void built (int n)
{
for (int i=1;i<=n;i++)
{
r[i][0]=v[i];
}
for (int p=1;(1<<p)<=n;p++)
{
for (int i=1;i<=n;i++)
{
r[i][p]=r[i][p-1];
int j=i+(1<<(p-1));
if (j<=n)
{
r[i][p]=min(r[i][p],r[j][p-1]);
}
}
}
E[1] = 0;
for (int i=2;i<=n;i++)
{
if (E[i]>(1<<E[i-1]))
{
E[i]=E[i-1]+1;
}
}
}
int query (int st,int dr)
{
int e=E[dr-st+1],l=1<<e;
return min(r[st][e],r[dr-l+1][e]);
}
int main()
{
int n,m;
cin>>n>>m;
for (int i=1;i<=n;i++)
{
cin>>v[i];
}
built (n);
int st,dr,e;
for (int i=1;i<=m;i++)
{
cin>>st>>dr;
cout<<query(st,dr)<<'\n';
}
return 0;
}