Sunday, 19 July 2020

LightOJ 1082 - Array Queries solution in c++

Problem link: 1082 - Array Queries



N.B: This is a segment tree problem. If you do not know about segment tree, spend some time to learn it and please try at least 1 hour to solve it yourself before seeing other's solution. Happy coding! 


  1. #include <bits/stdc++.h>
  2. using namespace std;
  3. #define MAX 200005
  4.  
  5. int a[MAX];
  6. int tree[MAX * 3];
  7. void init(int node, int b, int e)
  8. {
  9.     if (== e) {
  10.         tree[node] = a[b];
  11.         return;
  12.     }
  13.     int left = node * 2;
  14.     int right = node * 2 + 1;
  15.     int mid = (+ e) / 2;
  16.     init(left, b, mid);
  17.     init(right, mid + 1, e);
  18.     tree[node] = min(tree[left], tree[right]);
  19. }
  20. int query(int node, int b, int e, int i, int j)
  21. {
  22.     int x, y;
  23.     if (> e || j < b)
  24.         return INT_MAX;
  25.     if (>= i && e <= j)
  26.         return tree[node];
  27.     int Left = node * 2;
  28.     int Right = node * 2 + 1;
  29.     int mid = (+ e) / 2;
  30.     x = query(Left, b, mid, i, j);
  31.     y = query(Right, mid + 1, e, i, j);
  32.     return min(x, y);
  33. }
  34. int main() {
  35.     int t;
  36.     cin >> t;
  37.     for (int tc = 1; tc <= t; tc++)
  38.     {
  39.         int n, q;
  40.         scanf("%d%d"&n, &q);
  41.         for (int b = 1; b <= n; b++)
  42.             scanf("%d"&a[b]);
  43.  
  44.         init(11, n);
  45.         printf("Case %d:\n", tc);
  46.         for (int b = 1; b <= q; b++)
  47.         {
  48.             int i, j;
  49.             scanf("%d%d"&i, &j);
  50.             printf("%d\n", query(11, n, i, j));
  51.         }
  52.     }
  53.     return 0;
  54. }

No comments:

Post a Comment

LightOJ 1082 - Array Queries solution in c++

Problem link:  1082 - Array Queries N.B: This is a segment tree problem. If you do not know about segment tree, spend some time to learn it ...