Pagini recente » Cod sursa (job #1649250) | Cod sursa (job #97963) | Cod sursa (job #3282292) | Cod sursa (job #273560) | Cod sursa (job #1651914)
#include <fstream>
using namespace std;
const int NMAX=100005;
int v[NMAX], rmq[18][NMAX], lg[NMAX];
int main()
{
ifstream in("rmq.in");
ofstream out("rmq.out");
int n, m;
in>>n>>m;
for(int i=1; i<=n; i++)
in>>v[i];
lg[1]=0;
for(int i=2; i<=n; i++)
lg[i]=lg[i/2]+1;
for(int i=1; i<=n; i++)
rmq[0][i]=v[i];
for(int i=1; (1<<i)<=n; i++)
for(int j=1; j<=n-(1<<i)+1; j++)
{
int x=1<<(i-1);
rmq[i][j]=min(rmq[i-1][j], rmq[i-1][j+x]);
}
for(int i=1; i<=m; i++)
{
int x, y, l, d, dif;
in>>x>>y;
dif=y-x+1;
l=lg[dif];
d=dif-(1<<l);
out<<min(rmq[l][x], rmq[l][x+d])<<'\n';
}
return 0;
}