Pagini recente » Cod sursa (job #545921) | Cod sursa (job #1182419) | Cod sursa (job #1364357) | Cod sursa (job #1410320) | Cod sursa (job #2084871)
#include <fstream>
using namespace std;
ifstream fi("rmq.in");
ofstream fo("rmq.out");
const int nmax=1e5+5,INF=(1<<30);
int n,m,x[nmax],dp[nmax][20],a,b;
int sol(int x,int y)
{
int d=y-x+1;
int k=0;
while((1<<(k+1))<=d)
k++;
return min(dp[x][k],dp[y-(1<<k)+1][k]);
}
int main()
{
fi>>n>>m;
for(int i=1;i<=n;i++)
fi>>x[i];
for(int i=1;i<=n;i++)
dp[i][0]=x[i];
for(int j=1;(1<<j)<=n;j++)
for(int i=1;i<=n;i++)
dp[i][j]=INF;
for(int j=1;(1<<j)<=n;j++)
for(int i=1;i+(1<<j)-1<=n;i++)
dp[i][j]=min(dp[i][j-1],dp[i+(1<<(j-1))][j-1]);
for(int i=1;i<=m;i++)
{
fi>>a>>b;
fo<<sol(a,b)<<"\n";
}
fi.close();
fo.close();
return 0;
}