Pagini recente » Cod sursa (job #3168660) | Cod sursa (job #1066786) | Cod sursa (job #2340622)
#include <fstream>
#include <cmath>
using namespace std;
ifstream f("rmq.in");
ofstream g("rmq.out");
int n,a[100001],m[100001][20],k,x,y,r,dif;
void rmq()
{
for(int i=1; i<=n; i++)
m[i][0]=i;
for(int i=1; (1<<i)<=n; i++)
{
for(int j=1; j+(1<<i)-1<=n; j++)
{
if(a[m[j][i-1]] < a[m[j+(1<<(i-1))][i-1]])
m[j][i]=m[j][i-1];
else
m[j][i]=m[j+(1<<(i-1))][i-1];
}
}
}
int main()
{
f>>n>>r;
for(int i=1; i<=n; i++)
f>>a[i];
rmq();
for(int i=1; i<=r; i++)
{
f>>x>>y;
dif=y-x+1;
k=log2(dif);
if(a[m[x][k]] <= a[m[y-(1<<k)+1][k]])
g<<a[m[x][k]]<<'\n';
else
g<<a[m[y-(1<<k)+1][k]]<<'\n';
}
return 0;
}