Pagini recente » Cod sursa (job #1954154) | Cod sursa (job #2971180) | Cod sursa (job #2618732) | Cod sursa (job #341005) | Cod sursa (job #1514659)
#include <fstream>
//#define minim(a,b) (a<b)?a:b
//#define maxim(a,b) (a>b)?a:b
using namespace std;
int v[100101][30];
int log[100100];
int i, k, j, n, c, c2, l, rez;
void citire();
int minim(int x, int y){
return x < y ? x : y;
}
int maxim(int x, int y){
return x > y ? x : y;
}
ifstream in("rmq.in");
int main(){
for (i = 0; i <= 25; i++)
v[0][i] = 500000;
citire();
ofstream out("rmq.out");
/*for (int i = 0, j = 1; j <= n; i++, j *= 2){
for (int q = 0; q <= n; q++)
out << v[q][i] << ' ';
out << endl;
}*/
for (i = 0; i < k; i++){
in >> c >> c2;
l = log[c2 - c + 1];
out << minim(v[c2][l], v[c + (1 << l) - 1][l]) << '\n';
//out << i << '\n';
}
in.close();
out.close();
return 0;
}
void citire(){
in >> n >> k;
for (i = 1; i <= n; i++){
in >> c;
v[i][0] = c;
}
log[1] = 0;
for (i = 2; i <= n; i++){
if (i == (1 << (log[i - 1] + 1)))
log[i] = 1 + log[i - 1];
else
log[i] = log[i - 1];
}
for (int i = 1; i <= n; i++){
for (j = 1; 1 << j <= i; j++){
v[i][j] = minim(v[i][j - 1], v[i - (1 << (j - 1))][j - 1]);
}
}
}