Advertisement
Guest User

Untitled

a guest
Nov 14th, 2013
157
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.41 KB | None | 0 0
  1. #include <iostream>
  2. #include <string>
  3. #include <algorithm>
  4.  
  5. using namespace std;
  6.  
  7. #define MAXN 99
  8. #define L(n) (2*n)
  9. #define R(n) (2*n+1)
  10. #define P(n) (int)(n/2)
  11.  
  12. struct Node {
  13.   int p;
  14.   string s;
  15.   void swap(Node &other) {
  16.     Node tmp = (Node){p, s};
  17.     p = other.p, s = other.s;
  18.     other.p = tmp.p, other.s = tmp.s;
  19.   }
  20. };
  21.  
  22. class Queue {
  23. public:
  24.     Node pq[MAXN];
  25.     int size;
  26.     void bubble_up(int u);
  27.     void bubble_down(int u);
  28.     void add(string s, int p);
  29.     string remove();
  30. private:
  31.     int a = 1;
  32.     int b = 1;
  33. };
  34.  
  35. void Queue::bubble_up(int u) {
  36.   while(P(u)) {
  37.     if(pq[P(u)].p > pq[u].p) {
  38.       pq[u].swap(pq[P(u)]);
  39.       u = P(u);
  40.     } else break;
  41.   }
  42. }
  43.  
  44. void Queue::bubble_down(int u) {
  45.   while(L(u) <= size) {
  46.     int pp = min(pq[u].p, pq[L(u)].p);
  47.     if(R(u) <= size) pp = min(pp, pq[R(u)].p);
  48.     if(pp == pq[u].p) break;
  49.     else if(pp == pq[L(u)].p) {
  50.       pq[u].swap(pq[L(u)]);
  51.       u = L(u);
  52.     } else {
  53.       pq[u].swap(pq[R(u)]);
  54.       u = R(u);
  55.     }
  56.   }
  57. }
  58.  
  59. void Queue::add(string s, int p) {
  60.   pq[++size] = (Node){p, s};
  61.   bubble_up(size);
  62. }
  63.  
  64. string Queue::remove() {
  65.   string ret = pq[1].s;
  66.   pq[1].swap(pq[size--]);
  67.   bubble_down(1);
  68.   return ret;
  69. }
  70.  
  71. int main() {
  72.   Queue q;
  73.  
  74.   q.add("X", 10);
  75.   q.add("Y", 1);
  76.   q.add("Z", 3);
  77.  
  78.   cout << q.remove() << endl;
  79.   cout << q.remove() << endl;
  80.   cout << q.remove() << endl;
  81.  
  82.   return 0;
  83. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement