Pagini recente » Cod sursa (job #1033211) | Cod sursa (job #1400919) | Cod sursa (job #1357017) | Cod sursa (job #822187) | Cod sursa (job #3309054)
#include <iostream>
#include <queue>
#include <algorithm>
#include <set>
#include <map>
#include <stack>
#include <vector>
#include <string>
#include <deque>
#include <unordered_map>
#include <unordered_set>
#include <cmath>
#include <iomanip>
using namespace std;
#define ll long long
const int INF = 1e6;
struct SegmentTree{
int n;
int size;
vector<int> seg;
SegmentTree(vector<int>& arr){
n = arr.size();
size = 1;
while (size <= n) size<<=1;
seg.resize(2 * size, INF);
// populate the leaves
for (int i = 0; i < n; i++) seg[size + i] = arr[i];
for(int i = size - 1; i > 0; --i){
seg[i] = min(seg[2*i], seg[2*i + 1]);
}
}
int query(int node, int left, int right, int a, int b){
if (right < a || b < left) return INF;
if (a <= left && b >= right) return seg[node];
int mid = left + (right - left)/2;
return min(query(2*node, left, mid, a, b),
query(2*node + 1, mid +1, right, a , b));
}
};
int n, m;
vector<int> values;
void ReadData() {
cin >> n >> m;
int value = 0;
for(int i = 0; i < n ; ++i){
cin >> value;
values.push_back(value);
}
}
void Solve() {
SegmentTree seg(values);
int a, b;
for (int i = 0; i < m; i++)
{
cin >> a >> b;
a--; b--;
cout << seg.query(1, 0, seg.size - 1, a , b) << "\n";
}
}
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
freopen("rqm.in", "r", stdin);
freopen("rqm.out", "w", stdout);
int t = 1;
// cin >> t; // Uncomment for multiple test cases
while (t--) {
ReadData();
Solve();
}
return 0;
}