Pagini recente » Cod sursa (job #2776363) | Cod sursa (job #1038187) | Cod sursa (job #1059839) | Cod sursa (job #1611681) | Cod sursa (job #2818688)
#include <bits/stdc++.h>
using namespace std;
struct STree {
int n;
vector<int> t;
int Tree(vector<int>& A) {
n = 1;
while (n < A.size()) n *= 2;
t.assign(n*2, 0);
for (int i = n; i < n + A.size(); ++i) {
t[i] = A[i - n];
}
for (int i = n - 1; i >= 1; --i) {
t[i] = min(t[i * 2] , t[i * 2 + 1]);
}
}
int Get(int l, int r) {
l += n;
r += n;
int sum = 2e+9;
for (l, r; l <= r; l /= 2, r /= 2) {
if (l % 2 == 1) sum=min(t[l++],sum);
if (r % 2 == 0) sum=min(t[r--],sum);
}
return sum;
}
void Set(int index, int v) {
index += n;
t[index] = v;
index /= 2;
while (index >= 1) {
t[index] = min(t[index * 2],t[index * 2 + 1]);
index /= 2;
}
}
};
int main()
{int n,q,l,r;
cin>>n>>q;
struct STree v;
vector<int>a(n);
for(int i=0;i<n;i++)
cin>>a[i];
v.Tree(a);
for(int i=1;i<=q;i++)
{
cin>>l>>r;
cout<<v.Get(l-1,r-1)<<'\n';
}
return 0;
}