Pagini recente » Cod sursa (job #1471915) | Cod sursa (job #847496) | Cod sursa (job #145734) | Cod sursa (job #1418391) | Cod sursa (job #2645425)
#include <fstream>
using namespace std;
ifstream f("rmq.in");
ofstream g("rmq.out");
const int NMAX = 100002;
long long rmq[18][NMAX], lg[NMAX], v[NMAX];
long long n, m;
int main()
{
f >> n >> m;
for(long long i = 1; i <= n; i++)
f >> v[i];
lg[1] = 0;
for(int i = 2; i <= n; i++)
lg[i] = lg[i / 2] + 1;
for(long long i = 1; i <= n; i++)
rmq[0][i] = v[i];
for(long long i = 1; (1 << i) <= n; i++)
for(long long j = 1; j <= n - (1 << i) + 1; j++)
{
long long l = 1 << (i - 1);
rmq[i][j] = min(rmq[i - 1][j], rmq[i - 1][j + 1]);
}
for(long long i=1;i<=m;i++)
{
long long x,y;
f>>x>>y;
long long d=y-x+1;
long long l=lg[d];
long long sh=d-(1<<l);
g<<min(rmq[l][x],rmq[l][x+sh])<<'\n';
}
return 0;
}