// Первое знакомство с set-ом

#include <set>

using namespace std;

// set = Cбалансированное дерево. Более точно - Красно-Черное дерево (RB-tree).
// Соответственно все делается за O(logN) (кроме size, size за O(1))

set <int> heap; // упорядоченное множество {2,3,4}
multiset <int> s; // отличается от set тем, что элемент может встречаться несколько раз {2,2,3,3,3,4}

int main()
{
  s.insert(3); // добавить элемент "3" в множество
  s.erase(3); // удалить элемент "3" из множества

  for (int i = 0; i < 10; i++)
    s.insert(i);

  int Size = s.size(); // Размер множества
  int Min = *s.begin(); // Минимальный элемент множества (если не пусто)
  int Max = *s.rbegin(); // Максимальный элемент множества (если не пусто)
  int is = s.count(3); // Сколько раз число 3 встречается в множестве (для set всегда или 0, или 1)

  // s.begin() - указатель на первый элемент
  // s.end() - указатель на первый элемент после конца
  // set = [s.begin(), s.end())

  // k-й элемент:
  set <int>::iterator it = s.begin();
  for (int i = 0; i < k; i++)
    it++; // it += k писать нельзя, для set<int>::iterator += не существует
  int res = *it;

  return 0;
}