Pagini recente » Cod sursa (job #65500) | Cod sursa (job #3345503) | Cod sursa (job #3340489) | Cod sursa (job #3328565) | Cod sursa (job #3338599)
#include <fstream>
#include <cmath>
using namespace std;
ifstream fin("rmq.in");
ofstream fout("rmq.out");
const int Nmax = /*100005*/ 105;
const int Log2Nmax = 17;
int n, q;
int v[Nmax], rmq[Log2Nmax][Nmax];
void citire_vector(){
fin >> n >> q;
for(int i = 1; i <= n; i++){
fin >> v[i];
}
}
void calculare_rmq(){
for(int i = 1; i <= n; i++){
rmq[0][i] = v[i];
}
for(int bit = 1; (1 << bit) <= n; bit++){
for(int i = 1; i <= n - (1 << bit) + 1; i++){
rmq[bit][i] = min(rmq[bit - 1][i], rmq[bit - 1][i + (1 << (bit - 1))]);
}
}
}
void citire_si_rezolvare_interogari(){
int poz1, poz2, ordin;
for(int i = 1; i <= q; i++){
fin >> poz1 >> poz2;
ordin = log2(poz2 - poz1 + 1);
fout << min(rmq[ordin][poz1], rmq[ordin][poz2 - (1 << ordin) + 1]) << '\n';
}
}
int main(){
citire_vector();
calculare_rmq();
citire_si_rezolvare_interogari();
return 0;
}