蒟蒻求助:vector复杂度问题

P1168 中位数

oazestar @ 2019-09-24 21:40:28

自己打的代码:

(简写)

    vector<int> v;

    n = in; a = in; 
    outn(a); v.pb(a);
    for (int i = 2; i <= n; i += 2) {
        a = in; v.ins(upper_bound(v.begin(), v.end(), a), a);
        a = in; v.ins(upper_bound(v.begin(), v.end(), a), a);
        outn(v[i / 2]);
    }

然后一排 \color{blue}{\text{TLE}} 摆在那里

于是看了一眼题解

改了一下

    n = in;
    for (int i = 1; i <= n; ++i) {
        a = in; v.ins(upper_bound(v.begin(), v.end(), a), a);
        if (i & 1) outn(v[i / 2]);
    }

于是\color{green}{\text{AC}}

orz

这是什么复杂度概念orz


by yzm123 @ 2019-09-25 21:13:30

@辰殷yu 有的时候真的会有玄学问题,我有道题吧mymset改成手动初始化就莫名其妙的0->100了,不知道为什么


by qwqqwq_qwqqwq @ 2019-09-25 22:03:27

@辰殷yu 这得取决于你的算法所决定的插入位置吧,我不太清楚你在写什么所以我没有办法解答


by oazestar @ 2019-09-26 18:49:47

@qwqqwq_qwqqwq 我的想法就是

1.读入第一个数,把它输出并放到vector里;(因为第一个数自己就是自己的中位数)

2.循环(n / 2) 次,在每个循环中,分别读入两个数并在vector中寻找合适的位置插入;

3.因为从 i = 2 开始,每次 i += 2 ,所以在每一次的循环内vector中会是奇数个排好序的数,那么就可以直接输出 v[i / 2] 就是它的中位数。

(蒟蒻思想,如果有什么不对的地方,恳请dalao指教qaq)


上一页 |