vadimk772336

Untitled

Oct 30th, 2021
1,040
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.46 KB | None | 0 0
  1. #include <iostream>
  2.  
  3. using namespace std;
  4.  
  5. int main()
  6. {
  7.     Heap heap1;
  8.     Heap heap2;
  9.     char c;
  10.    
  11.     int count = 0;
  12.     ID1 = -1;
  13.     ID2 = -1;
  14.     <deque> deq1;
  15.     <deque> deq2;
  16.  
  17.     int N, M, K, ID;
  18.     int heapIdxToID[N];
  19.     for (int = 0; i < M; ++i)
  20.     {
  21.         cin >> c;
  22.         if (c == 'R')
  23.         {
  24.             count++;
  25.             R++;
  26.  
  27.             if (count < K)  //Не хватает - просто добавляем в 1 кучу
  28.             {
  29.                 ID1++;
  30.                 heap1.add(a[R], ID1); //ID1 - номер добавления элемента в 1 кучу
  31.                 deq1.push_back(ID1);
  32.                 cout << "-1" << endl;
  33.             }
  34.             if (count == K) //Только что набралось нужное число, просто добавляем к-ый и выводим
  35.             {
  36.                 ID1++;
  37.                 heap1.add(a[R], ID1);
  38.                 deq1.push_back(ID1);
  39.                 cout << heap1[0]; << endl;
  40.             }
  41.             if (count > K) //Появились лишние - их во вторую кучу (если больше корня, иначе в 1 а корень во вторую)
  42.             {
  43.                
  44.                 if (a[R] > heap1[0]) //Если больше корня то во вторую кучу просто
  45.                 {
  46.                     ID2++;
  47.                     heap2.add(a[R], ID2);
  48.                     deq2.push_back(ID2);
  49.                     cout << heap1[0] << endl;
  50.                 }
  51.                    
  52.                 else //Иначе корень стал уже к+1 и его во вторую надо
  53.                 {
  54.                     root1 = heap1[0];
  55.                     heap1.del(heap1[0]);
  56.                     heap1.add(a[R]);
  57.                     heap2.add(root1);
  58.                     //deq1.pushback(ID1++);
  59.                 }
  60.             }
  61.         }
  62.         else
  63.         {
  64.             L--;
  65.             count--;
  66.             if (count < K) //Стало недостаточно, удаляем первый добавленный в 1 кучу
  67.             {
  68.                 ID = deq1[0]; //В deq1[0] лежит номер первого добавленного
  69.                 deq1.pop_front();
  70.                 heap1.del(ID);
  71.                 cout << "-1" << endl;
  72.             }
  73.             if (count >= K) //В 1 куче к-1, во 2 1-inf. Надо удалить первый в 1 куче, перебросить из 2 кучи , удалить его и вывести
  74.             {
  75.                 ID = deq1[0];
  76.                 deq1.pop_front();
  77.                 heap1.del(ID);   //удаляю из первой кучи первый туда добавленный
  78.  
  79.                 ID1++;
  80.                 heap1.add(heap2[0], ID1); // добавляю из 2 кучи в первую (по идее вседа в корень т.к. он больше остальных)
  81.                 deq1.push_back(ID1);  //!!!!А не нарушиться ли от такого добавления порядок в массиве? надо же самый левый удалять
  82.  
  83.                 ID_top2 = heapIdxToID[0]; //узнаю какой айди у вершины второй кучи
  84.                 heap2.del(ID_top2); //удаляю вершину у 2 кучи
  85.                 cout << heap1[0] << endl;
  86.             }
  87.            
  88.         }
  89.     }
  90.     return 0;
  91. }
  92.  
Advertisement
Add Comment
Please, Sign In to add comment