Pagini recente » Cod sursa (job #2261869) | Cod sursa (job #1042996) | Cod sursa (job #1829925) | Cod sursa (job #210630) | Cod sursa (job #2876192)
#include <bits/stdc++.h>
#define MAXN 100000
#define LOGMAXN 18
using namespace std;
ifstream fin("rmq.in");
ofstream fout("rmq.out");
//csz programare dinamica
void sparse(int n, int arr[], int dp[][LOGMAXN]) {
for (int i = 0; i < n; i++)
dp[i][0] = i;
for (int j = 1; (1 << j) <= n; j++)
for (int i = 0; i + (1 << j) - 1 < n; i++)
dp[i][j] = min(arr[dp[i][j - 1]], arr[dp[i + (1 << (j - 1))][j - 1]]);
}
void citire(int &n, int &m, int arr[], int dp[][LOGMAXN]) {
fin >> n >> m;
for (int i = 0; i < n; i++)
fin >> arr[i];
sparse(n, arr, dp);
}
int rezolvare(int &n, int arr[], int dp[][LOGMAXN]) {
int i, j, k;
fin >> i >> j;
k = (int)log2(j - i + 1);
if (arr[dp[i][k]] <= arr[dp[j - (1 << k) + 1][k]])
return dp[i][k];
return dp[j - (1 << k) + 1][k];
}
int main() {
int n, m, arr[MAXN], dp[MAXN][LOGMAXN];
citire(n, m, arr, dp);
for (int i = 0; i < m; i++)
fout << rezolvare(n, arr, dp) << '\n';
return 0;
}