Pagini recente » Cod sursa (job #2967324) | Cod sursa (job #3197647) | Cod sursa (job #2278989) | Cod sursa (job #3245427) | Cod sursa (job #2432175)
#include <stdio.h>
#include <bits/stdc++.h>
#define rep(i, n) for(int i = 0; i < n; i++)
using namespace std;
typedef long long ll;
typedef pair<int, int> pii;
typedef vector<int> vi;
const int Nmax = 100555;
ifstream fin ("rmq.in");
ofstream fout ("rmq.out");
int N, M, A[Nmax], lg[Nmax];
int R[18][Nmax];
int main(void) {
fin >> N >> M;
rep(i, N) { fin >> A[i]; }
// pre-process
lg[1] = 0;
for(int n = 2; n <= N; ++n)
lg[n] = lg[n/2] + 1;
rep(i,N) { R[0][i] = A[i]; }
for(int j = 1; (1<<j) <= N; j++)
for(int i = 0; i + (1<<j) - 1 < N; i++) {
int x = 1 << (j-1);
R[j][i] = min(R[j-1][i], R[j-1][i+x]);
}
int a,b;
rep(i, M) {
fin >> a >> b;
--a, --b;
int diff = b-a+1;
int l = lg[diff];
fout << min(R[l][a], R[l][b+1-(1<<l)]) << '\n';
}
return 0;
}