Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <bits/stdc++.h>
- #define INF 1000000005
- using namespace std;
- int ar[1000];
- unordered_map <int,int> st; // <index, value>
- int query(int seg_ind, int ar_beg, int ar_end, int q_beg, int q_end) {
- if(q_beg >= ar_beg && q_end <= ar_end) {
- return st[seg_ind];
- }
- if(q_beg > ar_end || q_end < ar_beg) {
- return INF;
- }
- int mid = (ar_beg + ar_end) / 2;
- int l = query(2 * seg_ind, ar_beg, mid, q_beg, q_end);
- int r = query(2 * seg_ind+1, mid+1, ar_end, q_beg, q_end);
- return min(l,r);
- }
- void build_tree(int seg_ind, int ar_beg, int ar_end) {
- if(ar_beg == ar_end) {
- st[seg_ind] = ar[ar_beg];
- }
- int mid = (ar_beg + ar_end) / 2;
- build_tree(2 * seg_ind, ar_beg, mid);
- build_tree(2 * seg_ind+1, mid+1, ar_end);
- st[seg_ind] = min(st[2 * seg_ind], st[2 * seg_ind + 1]);
- }
- int main() {
- int n;
- cin >> n;
- for(int i=1 ; i<=n ; i++)
- cin >> ar[i];
- //for(int i=1 ; i<=n ; i++) cout << ar[i] << " ";
- build_tree(1,1,n);
- for(auto it: st) cout << (it).first << " -> " << (it).second << endl;
- cout << query(1,1,n,1,n);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement