Pagini recente » Cod sursa (job #222983) | Cod sursa (job #1160753) | Cod sursa (job #525433) | Cod sursa (job #2359754) | Cod sursa (job #2493857)
#include <fstream>
#define inf 100001
using namespace std;
ifstream cin("rmq.in");
ofstream cout("rmq.out");
int a[1 << 18], n, t, N;
void update(int pos, int x) {
for(int i = pos + N; i; i >>= 1)
a[i] = min(a[i], x);
}
int Min(int st, int dr) {
int ans = min(a[--st + N], a[--dr + N]);
for(st += N, dr += N; st < dr; st >>= 1, dr >>= 1) {
if(st & 1)
ans = min(ans, a[st++]);
if(dr & 1)
ans = min(ans, a[--dr]);
}
return ans;
}
int main() {
cin >> n >> t;
N = n;
while(N & (N - 1))
N += N & -N;
for(int i = N << 1; i; --i)
a[i] = inf;
for(int i = 0; i < n; ++i) {
int x;
cin >> x;
update(i, x);
}
cout << " 1\n 1 3\n 1 4 3 100001\n1 5 6 4 3 100001 100001 100001\n";
while(t--) {
int st, dr;
cin >> st >> dr;
cout << Min(st, dr) << '\n';
}
return 0;
}