Pagini recente » Cod sursa (job #621568) | Cod sursa (job #2903625) | Cod sursa (job #810569) | Cod sursa (job #834065) | Cod sursa (job #2981682)
#include <fstream>
#define log 19
#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];
}
puteri_2();
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";
}
}