Pagini recente » Cod sursa (job #2959261) | Cod sursa (job #1177680) | Cod sursa (job #143928) | Cod sursa (job #2533844) | Cod sursa (job #1463825)
#include<bits/stdc++.h>
using namespace std;
int a[100005], dp[100005][25], lg[100005];
int main()
{
int n, m, c, b;
FILE *fin = fopen("rmq.in", "r");
FILE *fout = fopen("rmq.out", "w");
fscanf(fin, "%d %d", &n, &m);
for (int i = 2; i <= n; ++i)
lg[i] = lg[i / 2] + 1;
for(int i = 0; i < n; ++i)
fscanf(fin, "%d", &a[i]);
for(int i = 0; i < n; ++i)
dp[i][0] = a[i];
for(int j = 1; j < 20; ++j)
for(int i = 0; i < n; ++i)
if(i + (1 << (j - 1)) <= n)
dp[i][j] = min(dp[i + (1 << (j - 1))][j - 1], dp[i][j - 1]);
for(int i = 0; i < m; ++i) {
fscanf(fin, "%d %d", &c, &b);
--c; --b;
int x = lg[b - c + 1];
fprintf(fout, "%d\n", min(dp[c][x], dp[b - (1 << x) + 1][x]));
}
}