Pagini recente » Cod sursa (job #1444375) | Cod sursa (job #2875445) | Istoria paginii runda/mafia_de_pe_infoarena | Istoria paginii runda/dedicatie_speciala | Cod sursa (job #3133856)
#include <iostream>
#include <cmath>
#include <fstream>
using namespace std;
ifstream fin("rmq.in");
ofstream fout("rmq.out");
int rmq[100000][20],v[100000];
void RMQ1(int N)
{
int i,j;
for (i = 0; i < N; i++)
rmq[i][0] = v[i];
for (i= 1; (1 << i) < N+1; i++)
{
for (j = 0; (1 << i)+j < N+1; j++)
{
rmq[j][i] = min(rmq[(1 << (i - 1))+j][i - 1],rmq[j][i - 1]);
}
}
}
int minim(int a, int b)
{
a=a-1;
b=b-1;
int c ;
c= log2(b -a + 1);
if(rmq[a][c]<=rmq[b +1- (1 << c)][c])
return rmq[a][c];
else return rmq[b +1- (1 << c)][c];
}
int main()
{
int i,j,a,b,N, M;
fin >> N >> M;
for ( i = 0; i < N; i++)
fin >> v[i];
RMQ1(N);
for ( i = 0; i < M; i++)
{
fin >>a >> b;
fout << minim(a, b) << "\n";
}
fin.close();
fout.close();
return 0;
}