Pagini recente » Cod sursa (job #270047) | Cod sursa (job #1653259) | Cod sursa (job #3215028) | Cod sursa (job #2796790) | Cod sursa (job #3134089)
#include <fstream>
#include <vector>
int RMQ[16][100005];
void R_M_Q( std::vector<int>& v, int num_of_elements)
{
for (int i = 0; i < v.size(); i++) { RMQ[0][i] = v[i]; }
for (int i = 1; (1 << i) <= num_of_elements; i++){
for (int j = 0; j + (1 << i) - 1 <= num_of_elements; j++)
{
RMQ[i][j] = std::min(RMQ[i - 1][j], RMQ[i - 1][j + (1 << (i - 1))]);
}
}
}
int main()
{
std::ifstream fin("rmq.in");
int num_of_elements;
int num_of_queries;
fin >> num_of_elements >> num_of_queries;
std::vector <int> v;
for (int i = 0; i < num_of_elements; i++)
{
int ele;
fin >> ele;
v.push_back(ele);
}
R_M_Q(v, num_of_elements);
std::ofstream fout("rmq.out");
for (int i = 1; i <= num_of_queries; i++){
int dr, st;
fin >> st >> dr;
st--;
dr--;
int p = 31 - __builtin_clz(dr - st + 1);
fout << std::min(RMQ[p][st], RMQ[p][dr - (1 << p) + 1]) << std::endl;
}
fin.close();
fout.close();
return 0;
}