Pagini recente » Cod sursa (job #278171) | Cod sursa (job #2305248) | Cod sursa (job #548753) | Cod sursa (job #2404603) | Cod sursa (job #2118522)
#include<fstream>
#include<cmath>
using namespace std;
ifstream fin("rmq.in");
ofstream fout("rmq.out");
const int NMAX = 100005, LOG2NMAX = log2(NMAX) + 5;
int rmq[LOG2NMAX][NMAX], numbersCount, queriesCount;
inline void read_data(){
fin >> numbersCount >> queriesCount;
int index;
for(index = 1; index <= numbersCount; ++index)
fin >> rmq[0][index];
}
inline void createRMQ(){
int row, column;
for(row = 1; (1 << row) <= numbersCount; ++row)
for(column = 1; column <= numbersCount - (1 << row) + 1; ++column)
rmq[row][column] = min(rmq[row - 1][column], rmq[row - 1][column + (1 << (row - 1))]);
}
inline void printRMQ(){
int row, column;
for(row = 0; (1 << row) <= numbersCount; ++row){
for(column = 1; column <= numbersCount - (1 << row) + 1; ++column)
fout << rmq[row][column] << ' ';
fout << '\n';
}
}
inline void answerQueries(){
int sequenceLength, levelInRMQ, leftIndex, rightIndex;
while(queriesCount--){
fin >> leftIndex >> rightIndex;
sequenceLength = rightIndex - leftIndex + 1;
levelInRMQ = (int)log2(sequenceLength);
fout << min(rmq[levelInRMQ][leftIndex], rmq[levelInRMQ][leftIndex + sequenceLength - (1 << levelInRMQ)]) << '\n';
}
}
int main(){
read_data();
createRMQ();
answerQueries();
}