Computer >> कंप्यूटर >  >> प्रोग्रामिंग >> C++

सी ++ अनुक्रम पर कुछ संचालन करने के लिए

मान लीजिए, हमें एक खाली अनुक्रम और n प्रश्न दिए गए हैं जिन्हें हमें संसाधित करना है। प्रश्न सरणी प्रश्नों में दिए गए हैं और वे प्रारूप {क्वेरी, डेटा} में हैं। प्रश्न निम्नलिखित तीन प्रकार के हो सकते हैं-

  • क्वेरी =1:आपूर्ति किए गए डेटा को अनुक्रम के अंत में जोड़ें।

  • क्वेरी =2:अनुक्रम की शुरुआत में तत्व को प्रिंट करें। उसके बाद तत्व को हटा दें।

  • क्वेरी =3:अनुक्रम को आरोही क्रम में क्रमबद्ध करें।

ध्यान दें, क्वेरी प्रकार 2 और 3 में हमेशा डेटा =0 होता है।

इसलिए, यदि इनपुट n =9 की तरह है, तो क्वेरीज़ ={{1, 5}, {1, 4}, {1, 3}, {1, 2}, {1, 1}, {2, 0}, {3, 0}, {2, 0}, {3, 0}}, तो आउटपुट 5 और 1 होगा।

प्रत्येक प्रश्न के बाद का क्रम नीचे दिया गया है -

  • 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} , प्रिंट 5.
  • 7:{1, 2, 3, 4}
  • 8:{2, 3, 4}, प्रिंट 1.
  • 9:{2, 3, 4}

इसे हल करने के लिए, हम इन चरणों का पालन करेंगे -

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

उदाहरण

आइए बेहतर समझ पाने के लिए निम्नलिखित कार्यान्वयन देखें -

#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;
}

इनपुट

9, {{1, 5}, {1, 4}, {1, 3}, {1, 2}, {1, 1}, {2, 0}, {3, 0}, {2, 0}, {3, 0}}

आउटपुट

5
1

  1. C++ प्रोग्राम किसी भी मैट्रिक्स का LU अपघटन करने के लिए

    एक मैट्रिक्स का LU अपघटन इसके निचले त्रिकोणीय मैट्रिक्स और ऊपरी त्रिकोणीय मैट्रिक्स के उत्पाद के रूप में एक मैट्रिक्स का निर्माण करता है। मैट्रिक्स के LU अपघटन में LU लोअर अपर के लिए होता है। मैट्रिक्स के LU अपघटन का एक उदाहरण नीचे दिया गया है - Given matrix is: 1 1 0 2 1 3 3 1 1 The L matrix is: 1

  1. सी++ प्रोग्राम जटिल संख्या गुणा करने के लिए

    जटिल संख्याएं वे संख्याएं हैं जिन्हें a+bi के रूप में व्यक्त किया जाता है जहां i एक काल्पनिक संख्या है और a और b वास्तविक संख्याएं हैं। सम्मिश्र संख्याओं के कुछ उदाहरण हैं - 2+3i 5+9i 4+2i सम्मिश्र संख्या गुणन करने का कार्यक्रम इस प्रकार है - उदाहरण #include<iostream> using namespace std; int

  1. मैट्रिक्स गुणन करने के लिए C++ प्रोग्राम

    मैट्रिक्स संख्याओं का एक आयताकार सरणी है जिसे पंक्तियों और स्तंभों के रूप में व्यवस्थित किया जाता है। मैट्रिक्स का एक उदाहरण इस प्रकार है। एक 3*2 मैट्रिक्स में 3 पंक्तियाँ और 2 कॉलम होते हैं जैसा कि नीचे दिखाया गया है - 8 1 4 9 5 6 एक प्रोग्राम जो मैट्रिक्स गुणन करता है वह इस प्रकार है। उदाहरण #i