Maison > développement back-end > C++ > Effectuer des opérations spécifiques sur des séquences en utilisant C++

Effectuer des opérations spécifiques sur des séquences en utilisant C++

WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWB
Libérer: 2023-09-03 11:49:06
avant
1117 Les gens l'ont consulté

Effectuer des opérations spécifiques sur des séquences en utilisant C++

Supposons que nous ayons une séquence vide et n requêtes qui doivent être traitées. Les requêtes sont données sous forme de requêtes tableau au format {query, data}. Les requêtes peuvent être des trois types suivants :

  • query = 1 : ajoute les données fournies à la fin de la séquence.

  • query = 2 : Imprime l'élément au début de la séquence. Supprimez ensuite l'élément.

  • query = 3 : Trie la séquence par ordre croissant.

Notez que les données des types de requêtes 2 et 3 sont toujours 0.

Donc, si l'entrée est n = 9, requêtes = {{1, 5}, {1, 4}, {1, 3}, {1, 2}, {1, 1}, {2, 0}, {3, 0}, {2, 0}, {3, 0}}, alors la sortie sera 5 et 1.

La séquence après chaque requête est la suivante :

  • 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}, imprimer 5.
  • 7 : {1, 2, 3, 4}
  • 8 : {2, 3, 4}, imprimez 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
    Copier après la connexion
  • sortie
#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;
}
Copier après la connexion

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal