- insert(j,v,idx);
-
- }
- int size() { return value_arr_.size(); }
- V front_val() { return value_arr_[0]; }
- I front_idx() { return indices_arr_[0]; }
- void del(int i)
- {
- value_arr_.del(i);
- indices_arr_.del(i);
- }
- int size() const
- {
- OK();
- return value_arr_.size();
- }
-
+ @param 1 <= i < size () */
+ T &operator [] (vsize i)
+ {
+ return heap_array_[i];
+ }
+ T operator [] (vsize i) const
+ {
+ return heap_array_[i];
+ }
+ void OK () const
+ {
+#ifndef NDEBUG
+ for (vsize i = 2; i <= size (); i++)
+ assert (compare (elt (i / 2), elt (i)) <= 0);
+#endif
+ }
+ T front () const
+ {
+ return elt (1);
+ }
+ vsize size () const
+ {
+ return heap_array_.size ();
+ }
+ void insert (T v)
+ {
+ heap_array_.push_back (v);
+ vsize i = heap_array_.size ();
+ vsize j = i / 2;
+ while (j)
+ {
+ if (compare (elt (j), v) > 0)
+ {
+ elt (i) = elt (j);
+ i = j;
+ j = i / 2;
+ }
+ else
+ break;
+ }
+ elt (i) = v;
+ OK ();
+ }
+ T max () const
+ {
+ //int first_leaf_i = size ();
+ T max_t;
+ return max_t;
+ }
+ void delmin ()
+ {
+ assert (size ());
+ T last = heap_array_.back ();