Pagini recente » Cod sursa (job #1037373) | Cod sursa (job #1488986) | Cod sursa (job #1327731) | Cod sursa (job #1110929) | Cod sursa (job #2645771)
#include <bits/stdc++.h>
using namespace std;
/* CLASS BUILD FOR INTEGRATING IT IN OTHER PROBLEMS THAT REQUIER RMQ */
template<class dataType>
class RMQ
{
private:
uint_fast32_t N;
uint_fast8_t K;
vector<uint_fast8_t> log_base_2;
void build_log_base_2()
{
log_base_2.resize(N + 1, 0);
for(uint_fast32_t i = 2; i <= N; ++i)
{
log_base_2[i] = log_base_2[i >> 1] + 1;
}
}
vector<vector<dataType>> rmq;
void build_rqm(vector<dataType>& data)
{
rmq.resize(K + 1, vector<dataType>(N + 1));
for(uint_fast32_t i = 1; i <= N; ++i)
rmq[0][i] = data[i];
for(uint_fast8_t k = 1; k <= K; ++k)
for(uint_fast32_t i = 1; i <= N; ++i)
rmq[k][i] = min(rmq[k - 1][i], rmq[k - 1][i + (1 << (k - 1))]);
}
public:
RMQ(vector<dataType>& data)
{
N = data.size();
build_log_base_2();
K = log_base_2[N];
build_rqm(data);
}
dataType query(uint_fast32_t left, uint_fast32_t right)
{
uint_fast32_t k = log_base_2[right - left + 1];
return min(rmq[k][left], rmq[k][right - (1 << k) + 1]);
}
};
int main()
{
ifstream fin("rmq.in");
ofstream fout("rmq.out");
ios_base::sync_with_stdio(false);
fin.tie(NULL);
uint_fast32_t N, M;
fin >> N >> M;
vector<uint_fast32_t> v(N + 1);
for(uint_fast32_t i = 1; i <= N; ++i)
fin >> v[i];
RMQ<uint_fast32_t> rmq(v);
for(uint_fast32_t i = 1; i <= M; ++i)
{
uint_fast32_t x, y;
fin >> x >> y;
fout << rmq.query(x, y) << '\n';
}
}