[BOJ/C+]2075号N次大数


この問題は優先順位キューを用いてN番目の大きな数を求める問題である.メモリ制限は12 MBであることに注意してください.最初はメモリ制限を考慮せずに実現しました.
  • 優先キューを大きな順序でソートすると発表しました.
  • N-1、pop、topを返します.
  • これにより、希望する答えが得られますが、メモリの制限を受けます.メモリを減らすには、優先キューのサイズを小さくする必要があります.
    宣言
  • 優先キューは、より小さな順序でソートされます.
  • 配列値を優先キューに入れる前に、優先キューのサイズを考慮してください.
  • のサイズが挿入する配列値より大きい場合、優先キューのtopがこの値より小さい場合、配列値がプッシュされ、ポップアップされます.
  • のサイズが小さい場合は、アレイの値が高くなります.
  • Code

    #include <iostream>
    #include <queue>
    using namespace std;
    
    int n;
    int a;
    priority_queue<int, vector<int>, greater<>> pq;
    
    
    void Input(){
        cin>>n;
        for(int i=0; i<n*n; i++){
            cin>>a;
            if(pq.size()<n){
                pq.push(a);
            }
            else if(pq.top()<a){
                pq.push(a);
                pq.pop();
            }
            else
                continue;
        }
    }
    
    int Solution(){
        return pq.top();
    }
    
    int main(){
        ios::sync_with_stdio(false);
        cin.tie(0);
        cout.tie(0);
        Input();
        cout<<Solution()<<endl;
        return 0;
    }