Pagini recente » Cod sursa (job #7210) | Cod sursa (job #566742) | Cod sursa (job #280750) | Cod sursa (job #514152) | Cod sursa (job #3134282)
#include <fstream>
#include <iostream>
#include <vector>
#include <cmath>
std::ifstream in;
std::ofstream out;
std::vector<std::vector<int>> buildRMQ(const std::vector<int>& v){
int n = v.size();
int m = log2(n) + 1;
std::vector<std::vector<int>> RMQ(m, std::vector<int>(n));
for(int i = 0; i< n; i++)
RMQ[0][i] = v[i];
for(int j = 1; j <= m; j++)
for(int i = 0; i + (1<<j) - 1 < n; i++)
RMQ[j][i] = std::min(RMQ[j-1][i], RMQ[j-1][i + (1<<j) - 1]);
return RMQ;
}
int main() {
int n, m, i, a, b;
in.open("rmq.in");
in>>n>>m;
std::vector<int> v(n);
for(i=0;i<n;i++){
in>>v[i];
}
std::vector<std::vector<int>> RMQ = buildRMQ(v);
out.open("rmq.out");
for(i = 0; i < m; i++){
in>>a>>b;
int k = log2(b - a + 1);
if(RMQ[k][b - (1<<k)] == 0)
out<<RMQ[k][a - 1]<<'\n';
else
out<<std::min(RMQ[k][a - 1],RMQ[k][b - (1<<k)])<<'\n';
}
in.close();
out.close();
return 0;
}