Advertisement
Guest User

problem 1 beta

a guest
May 21st, 2019
101
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.93 KB | None | 0 0
  1. #include<bits/stdc++.h>
  2. using namespace std;
  3.  
  4. long long n, m, type, value, a[300300];
  5. bool flag = 1;
  6. struct node
  7. {
  8.     long long value, numberOfNodes;
  9.     struct node *left, *right;
  10. };
  11. struct node *root = NULL;
  12.  
  13. struct node *newNode(long long value)
  14. {
  15.     struct node *New =  (struct node *)malloc(sizeof(struct node));
  16.     New->value = value;
  17.     New->left = New->right = NULL;
  18.     New->numberOfNodes = 1;
  19.     return New;
  20. }
  21.  
  22. struct node* addSalary(struct node* node, long long value)
  23. {
  24.     if (node == NULL) //if the node is a leaf add new node
  25.         return newNode(value);
  26.     node->numberOfNodes++;
  27.     if (value <= node->value)
  28.         node->left  = addSalary(node->left, value);
  29.     else
  30.         node->right = addSalary(node->right, value);
  31.     return node;
  32. }
  33.  
  34. void InsertArray(long long left, long long right)
  35. {
  36.     if(left > right)
  37.         return;
  38.     long long mid = (left + right)/2;
  39.     if(flag) // if the tree is empty make this node the root
  40.     {
  41.         root = addSalary(root, a[mid]);
  42.         flag = 0;
  43.     }
  44.     else
  45.         addSalary(root, a[mid]);
  46.     InsertArray(mid + 1, right);
  47.     InsertArray(left, mid - 1);
  48. }
  49.  
  50. long long upperBound(struct node* curr, long long value)
  51. {
  52.     if (curr == NULL)
  53.        return 0;
  54.     long long ret = 0;
  55.     if (curr->value >= value)
  56.     {
  57.         ret = upperBound(curr->left, value);
  58.         if(curr->right != NULL)
  59.             ret += curr->right->numberOfNodes;
  60.         if(curr->value > value)
  61.             ret++;
  62.     }
  63.     else
  64.         ret = upperBound(curr->right, value);
  65.     return ret;
  66. }
  67.  
  68. int main()
  69. {
  70.     cin >> n;
  71.     for(int i=0; i<n ; i++)
  72.         cin >> a[i];
  73.     sort(a, a+n);
  74.     InsertArray(0, n-1);
  75.     cin >> m;
  76.     for(int i=0 ; i<m ; i++)
  77.     {
  78.         cin >> type >> value;
  79.         if(type == 2)
  80.             cout << upperBound(root, value) << endl;
  81.         else
  82.             addSalary(root, value);
  83.     }
  84.     return 0;
  85. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement