The performance of a COUNT(*) based on an index or on a table really depends on the segment size. You can have a 1GB table that only has a single row in it, but Oracle might still have to scan the entire allocated space. Inserting another million rows might not affect performance at all if it does not alter the high-water mark. Indexes work in a similar manner, where different patterns of deletes can leave different amounts of free space in the index structure and cause index scans to give better or worse performance than O(N).
So, theoretically it's O(N). In practice there are iplementation issues that can cause it to be very different.
For example there are some cases where an Oracle data warehouse might give better than O(N) performance. In particular the optimizer could scan a bitmap index, and the size of a bitmap index is only weakly related to the size of the table, unlike a b-tree index. This is because of the compression methodology which makes the index size dependent on the size of the table, the number of unique values, the distribution of values throughout the table, and the historical loading pattern as well I believe. So, doubling the number of rows in the table might only increase the size of the index by 10%.
In the presence of a materialized view you might also get O(1) by reading a summary table (a trigger is an unsafe way of doing this).