Pagini recente » Cod sursa (job #2504773) | Cod sursa (job #1152646) | Cod sursa (job #674717) | Cod sursa (job #131599) | Cod sursa (job #2428875)
#include <iostream>
#include <fstream>
std::ifstream fin("rmq.in");
std::ofstream fout("rmq.out");
int rm[100500][20];
int v[100500];
int n,m;
int logg(int x)
{
if(x!=0)
return 1+logg(x/2);
return -1;
}
int main()
{
fin>>n>>m;
for(int i=0;i<n;i++)
{
fin>>v[i];
rm[i][0]=v[i];
}
int pow2=1;
for(int j=1;pow2<=n;j++,pow2=pow2*2)
for(int i=0;i<n;i++)
{
if(i+pow2 >=n) rm[i][j]=rm[i][j-1];
else rm[i][j]=std::min(rm[i][j-1],rm[i+pow2][j-1]);
}
for(int i=0;i<m;i++)
{
int a,b;
fin>>a>>b;
int k= logg(b-a+1);
int poww = 1<<k;
fout<<std::min(rm[a-1][k],rm[b-poww][k])<<"\n";
}
}