给定一个空数组,我需要进行两种类型的查询
在数组中插入一个元素
查找某个元素k的索引(显然数组必须保持排序)
这可以通过使用set
容器来完成
set<int> st;
set.insert(t);
这会将我的元素插入O(log(n))
.
对于第二个查询
set<int>::iterator it;
it = st.find(k);
idx = distance(st.begin(), it);
这需要O(n)
时间。( O(n)
[对于distance()
[ + O(log(n)
[对于set::find()
] )。
有没有办法在O(log(n))
使用 C++ 的预定义容器时进行这两个查询?