Pagini recente » Cod sursa (job #928722) | Cod sursa (job #1959677) | Cod sursa (job #1172909) | Cod sursa (job #1007077) | Cod sursa (job #2755382)
#include <fstream>
std::ifstream f("rmq.in");
std::ofstream g("rmq.out");
const int MAXLOGN = 20;
int main()
{
int N, M;
f >> N >> M;
int Vector[N], RMQ[MAXLOGN][N];
for(int i = 0; i < N; ++i)
f >> Vector[i];
for(int i = 0; i < N; ++i)
RMQ[0][i] = Vector[i];
for(int putere = 2, i = 1; putere <= N; putere *= 2, ++i)
for(int j = 0; j <= N - putere; ++j)
RMQ[i][j] = std::min(RMQ[i-1][j], RMQ[i-1][j + putere / 2]);
for(int x, y, i = 0; i < M; ++i)
{
f >> x >> y;
int Minim = 100001;
int Putere = 1;
int index_Putere = 0;
int Range = y - x + 1;
while(Putere * 2 <= Range)
{
Putere *= 2;
++index_Putere;
}
while(Putere != 0)
{
if(Putere <= Range)
{
Minim = std::min(Minim, RMQ[index_Putere][x - 1]);
x += Putere;
Range -= Putere;
}
Putere /= 2;
--index_Putere;
}
g << Minim << '\n';
}
return 0;
}