Pagini recente » Cod sursa (job #1281671) | Cod sursa (job #2155139) | Cod sursa (job #371826) | Cod sursa (job #964948) | Cod sursa (job #3343963)
#include <bits/stdc++.h>
using namespace std;
ifstream in ("rmq.in");
ofstream out ("rmq.out");
int r[100067][18];
int e[100067];
int v[100067];
void build(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 (i>=(1<<(e[i-1]+1)))
e[i]=e[i-1]+1;
else
e[i]=e[i-1];
//out<<i<<" "<<(1<<e[i])<<endl;
}
}
int query(int st,int dr)
{
int l=dr-st+1;
return min(r[st][e[l]],r[dr-(1<<e[l])+1][e[l]]);
}
int main()
{
int n,m;
in>>n>>m;
for (int i=1;i<=n;i++)
{
in>>v[i];
}
build(n);
int st,dr;
for (int i=1;i<=m;i++)
{
in>>st>>dr;
out<<query(st,dr)<<'\n';
}
return 0;
}