Pagini recente » Cod sursa (job #1632859) | Cod sursa (job #1765195) | Cod sursa (job #2231345) | Cod sursa (job #1356204) | Cod sursa (job #2293620)
#include <cstdlib>
#include <iostream>
#include <cmath>
#include <climits>
#define NUMBER 1000000
#define LOGNUMBER 20
int M[NUMBER][LOGNUMBER] = {0};
using namespace std;
void CalculateElements(int M[NUMBER][LOGNUMBER], int A[NUMBER], int N){
int i, j;
for(i = 0; i < N; i++){
M[i][0] = i;
}
for(j = 1; (1 << j) <= N; j++){
for(i = 0; i + (1 << j) - 1 < N; i++){
if(A[M[i][j - 1]] < A[M[i + (1 << (j - 1))][j - 1]]){
M[i][j] = M[i][j - 1];
}
else {
M[i][j] = M[i + (1 << (j - 1))][j - 1];
}
}
}
}
int main(){
int n, m, i, j, k, x, y;
cin >> n >> m;
//int **M = new int[n][20];
int *a = new int[n];
for(i = 0; i < n; i++){
cin >> a[i];
}
CalculateElements(M, a, n);
for(i = 0; i < m; i++){
cin >> x >> y;
k = floor(log2(y - x + 1));
if(a[M[x][k]] <= a[M[y - (1 << k) + 1][k]]){
cout << a[M[x][k]];
}
else {
cout << a[M[y - (1 << k) + 1][k]];
}
if(i < m - 1){
cout << "\n";
}
}
free(a);
}