Pagini recente » Cod sursa (job #101819) | Rating Mihai Popescu (mihaipmp) | Cod sursa (job #2123182) | Cod sursa (job #1143524) | Cod sursa (job #3040542)
#include <fstream>
#define nmax 100005
#define mmax 19
using namespace std;
int n,m,dp[nmax][mmax],lg[nmax],v[nmax],st,dr;
ifstream f("rmq.in");
ofstream g("rmq.out");
void rmq()
{
lg[1]=0;
for(int i=2;i<=n;i++)
lg[i]=lg[i>>1]+1;
for(int i=0;i<n;i++)
dp[i][0]=v[i];
for(int j=1;(1<<j)<=n;j++)
{
for(int i=0;i+(1<<j)-1<n;i++)
{
dp[i][j]=min(dp[i][j-1],dp[i+(1<<(j-1))][j-1]);
}
}
f.close();
return;
}
void solve()
{
f>>n>>m;
for(int i=0;i<n;i++)
f>>v[i];
rmq();
for(int i=1;i<=m;i++)
{
f>>st>>dr;
st--;
dr--;
int lun=dr-st+1;
g<<min(dp[st][lg[lun]],dp[dr-(1<<lg[lun])+1][lg[lun]])<<'\n';
}
g.close();
return;
}
int main()
{
solve();
return 0;
}