Rumah > pembangunan bahagian belakang > C++ > Lakukan operasi khusus pada jujukan menggunakan C++

Lakukan operasi khusus pada jujukan menggunakan C++

WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWB
Lepaskan: 2023-09-03 11:49:06
ke hadapan
1128 orang telah melayarinya

Lakukan operasi khusus pada jujukan menggunakan C++

Andaikan kita mempunyai urutan kosong dan n pertanyaan yang perlu diproses. Pertanyaan diberikan dalam bentuk pertanyaan tatasusunan dalam format {query, data}. Pertanyaan boleh terdiri daripada tiga jenis berikut:

  • pertanyaan = 1: Menambah data yang disediakan pada penghujung jujukan.

  • query = 2: Cetak elemen pada permulaan jujukan. Kemudian padamkan elemen tersebut.

  • query = 3: Isih urutan dalam tertib menaik.

Perhatikan bahawa data jenis pertanyaan 2 dan 3 sentiasa 0.

Jadi jika input ialah n = 9, pertanyaan = {{1, 5}, {1, 4}, {1, 3}, {1, 2}, {1, 1}, {2, 0}, {3, 0}, {2, 0}, {3, 0}}, maka outputnya ialah 5 dan 1.

Jujukan selepas setiap pertanyaan adalah seperti berikut:

  • 1: {5}
  • 2: {5, 4}
  • 3: {5, 4, 3}
  • 4: {5, 4, 3 , 2}
  • 5:{5, 4, 3, 2, 1}
  • 6:{4, 3, 2, 1}, cetakan 5.
  • 7: {1, 2, 3, 4}
  • 8: {2, 3, 4}, cetakan 1.
  • 9
  • priority_queue<int> priq
    Define one queue q
    for initialize i := 0, when i < n, update (increase i by 1), do:
       operation := first value of queries[i]
       if operation is same as 1, then:
          x := second value of queries[i]
          insert x into q
       otherwise when operation is same as 2, then:
          if priq is empty, then:
             print first element of q
             delete first element from q
          else:
             print -(top element of priq)
             delete top element from priq
        otherwise when operation is same as 3, then:
           while (not q is empty), do:
              insert (-first element of q) into priq and sort
              delete element from q
    Salin selepas log masuk
  • output
#include <bits/stdc++.h>
using namespace std;

void solve(int n, vector<pair<int, int>> queries){
   priority_queue<int> priq;
   queue<int> q;
   for(int i = 0; i < n; i++) {
      int operation = queries[i].first;
      if(operation == 1) {
         int x;
         x = queries[i].second;
         q.push(x);
      } else if(operation == 2) {
         if(priq.empty()) {
             cout << q.front() << endl;
             q.pop();
         } else {
            cout << -priq.top() << endl;
            priq.pop();
         }
      } else if(operation == 3) {
         while(!q.empty()) {
            priq.push(-q.front());
            q.pop();
         }
      }
   }
}
int main() {
   int n = 9; vector<pair<int, int>> queries = {{1, 5}, {1, 4}, {1, 3}, {1, 2}, {1, 1}, {2, 0},  {3, 0}, {2, 0}, {3, 0}};
   solve(n, queries);
   return 0;
}
Salin selepas log masuk

Atas ialah kandungan terperinci Lakukan operasi khusus pada jujukan menggunakan C++. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan