Pagini recente » Cod sursa (job #1334258) | Cod sursa (job #2413129) | Cod sursa (job #806617) | Cod sursa (job #1449147) | Cod sursa (job #2284645)
#include <iostream>
#include <fstream>
using namespace std;
unsigned long RMQ[17][100001];
int log2(unsigned long x)
{
int i=0;
int p=1;
while(p<=x)
{
p=p*2;
i=i+1;
}
return i-1;
}
unsigned long pow2(unsigned x)
{
unsigned i;
unsigned long p=1;
for(i=0; i<x; i++)
{
p=p*2;
}
return p;
}
unsigned long minim(unsigned long a, unsigned long b)
{
if(a<b)
return a;
else
return b;
}
int main()
{
unsigned long n, m, j, p, i, d, x, y, pq;
ifstream fin("rmq.in");
ofstream fout("rmq.out");
fin>>n>>m;
for(j=1; j<=n; j++)
{
fin>>RMQ[0][j];
}
p=log2(n);
for(i=1; i<=p; i++)
{
for(j=1; j<=n-pow2(i)+1; j++)
RMQ[i][j]=minim(RMQ[i-1][j], RMQ[i-1][j+i]);
}
/*for(i=0; i<=p; i++)
{
for(j=1; j<=n; j++)
cout<<RMQ[i][j]<<" ";
cout<<endl;
}*/
for(i=0; i<m; i++)
{
fin>>x>>y;
d=y-x+1;
pq=log2(d);
fout<<minim(RMQ[pq][x], RMQ[pq][y-pow2(pq)+1])<<endl;
}
}