Container with findNthSmallest in O(1)
As pointed out by orlp, it's impossible to do in $O(\log n)$ time. However, we can do this in $O(\log N)$ time, where $N$ is the total number of items.
You can do this with 2 Heaps:
The first heap is a max-heap with the smallest $n$ elements. Its root is the $n$-th smallest element.
The second one is the min-heap with the rest of the elements. Its root is the $n+1$-th smallest element.
When max-heap has less than $n$ elements, the operations are trivial. Otherwise:

findNthSmallest() - it's just the root of the max-heap. O(1) time
popNthSmallest():

Pop the root of the max-heap
x := Pop the root of the min-heap
Insert x into the max-heap


push(x):

Push x into the max-heap
y := Pop the root of the max-heap.
Push y into the min-heap.