Pagini recente » Cod sursa (job #926146) | Cod sursa (job #1578393) | Cod sursa (job #2589886) | Cod sursa (job #2775695) | Cod sursa (job #1411018)
#include <fstream>
#include <iostream>
#include <algorithm>
#define MAXLOGN 20
#define MAXN 1000005
using namespace std;
long n, m;
long v[MAXLOGN][MAXN];
void buildRMQ()
{
for(long k=1, powk=2; powk<=n; ++k, powk<<=1)
for(long i=n-powk+1; i>=1; --i)
v[k][i]=min(v[k-1][i], v[k-1][i+powk/2]);
}
long queryRMQ(long x, long y)
{
long length, k=0, powk=1;
length=y-x;
while(powk<=length)
{
++k;
powk<<=1;
}
--k; powk>>=1;
if(k==-1)
{
k=0;
powk=1;
}
return min(v[k][x], v[k][y-powk+1]);
}
int main()
{
ifstream in("rmq.in");
ofstream out("rmq.out");
long x, y;
in>>n>>m;
for(long i=1; i<=n; ++i)
in>>v[0][i];
buildRMQ();
for(long i=0; i<m; ++i)
{
in>>x>>y;
out<<queryRMQ(x, y)<<'\n';
}
return 0;
}