cpp-library

This documentation is automatically generated by online-judge-tools/verification-helper

View the Project on GitHub 9tc/cpp-library

:warning: data-structure/kth-sum-priority_queue.hpp

Code

template<typename T>
struct KthSumPriorityQueue{
  priority_queue<T> pqr;
  priority_queue<T, vector<T>, greater<T>> pql;
  T sm;
  int k;

  KthSumPriorityQueue(int k): k(k) {
    sm = 0;
  }

  void push(T x){
    pql.push(x);
    sm += x;
    if(pql.size() > k){
      sm -= pql.top();
      pqr.push(pql.top());
      pql.pop();
    }
  }

  void pop(){
    // TODO
    assert(false);
  }

  T top(){
    return pql.top();
  }

  T sum(){
    return sm;
  }

  int size(){
    return pql.size() + pqr.size();
  }

  bool empty(){
    return pql.empty();
  }

  void setk(int k){
    this->k = k;
    while(pql.size() > k){
      sm -= pql.top();
      pqr.push(pql.top());
      pql.pop();
    }
    while(pql.size() < k && !pqr.empty()){
      sm += pqr.top();
      pql.push(pqr.top());
      pqr.pop();
    }
  }
};
#line 1 "data-structure/kth-sum-priority_queue.hpp"
template<typename T>
struct KthSumPriorityQueue{
  priority_queue<T> pqr;
  priority_queue<T, vector<T>, greater<T>> pql;
  T sm;
  int k;

  KthSumPriorityQueue(int k): k(k) {
    sm = 0;
  }

  void push(T x){
    pql.push(x);
    sm += x;
    if(pql.size() > k){
      sm -= pql.top();
      pqr.push(pql.top());
      pql.pop();
    }
  }

  void pop(){
    // TODO
    assert(false);
  }

  T top(){
    return pql.top();
  }

  T sum(){
    return sm;
  }

  int size(){
    return pql.size() + pqr.size();
  }

  bool empty(){
    return pql.empty();
  }

  void setk(int k){
    this->k = k;
    while(pql.size() > k){
      sm -= pql.top();
      pqr.push(pql.top());
      pql.pop();
    }
    while(pql.size() < k && !pqr.empty()){
      sm += pqr.top();
      pql.push(pqr.top());
      pqr.pop();
    }
  }
};
Back to top page