Pagini recente » Cod sursa (job #2507975) | Cod sursa (job #1703171) | Cod sursa (job #1408901) | Cod sursa (job #119199) | Cod sursa (job #2981673)
#include <fstream>
#define log 18
#define dim 100001
using namespace std;
ifstream fin("rmq.in");
ofstream fout("rmq.out");
int rmq[log][dim], puteri2[dim], v[dim];
int n;
void build_rmq()
{
for(int p=1;p<log;p++)
{
for(int nod=1;nod<=n;nod++)
{
int crt=rmq[p-1][nod];
if(nod+(1<<(p-1))<=n)
{
int crt2=rmq[p-1][nod+1<<(p-1)];
rmq[p][nod]=min(crt, crt2);
}
else
{
rmq[p][nod]=crt;
}
}
}
}
void puteri_2()
{
puteri2[1]=0;
for(int i=2;i<=n;i++)
{
puteri2[i]=puteri2[i/2]+1;
}
}
int main()
{
int i, m, x, y;
fin>>n>>m;
for(i=1;i<=n;i++)
{
fin>>v[i];
rmq[0][i]=v[i];
}
build_rmq();
for(i=1;i<=m;i++)
{
fin>>x>>y;
if(x>y)
{
swap(x, y);
}
int p=puteri2[y-x+1];
int crt=min(rmq[p][x], rmq[p][y-(1<<p)+1]);
fout<<crt<<"\n";
}
}