没有婼姐写得好
将所有的输入放入mp,mp2
覆盖的数存入mp
一开始认为mp中只出现一次的元素就是,忘了可能只被覆盖一次的情况
所以添加了mp2保存输入

#include <iostream>
#include<algorithm>
#include<map>
#include<vector>
using namespace std;

int main() {
    int N; scanf("%d", &N);
    map<int,int> mp,mp2;
    for (int i = 0; i<N; i++) {
        int temp; scanf("%d", &temp);
        mp[temp]++; mp2[temp] = 1;
        while (temp != 1) {
            if (temp % 2 == 0) {
                temp /= 2; mp[temp]++;
            }
            else {
                temp = (temp * 3 + 1) / 2; mp[temp]++;
            }
        }
    }
    vector<int> ve;
    for (map<int, int>::iterator it = mp.begin(); it != mp.end(); it++) {
        if (it->second == 1&&mp2[it->first]==1) ve.push_back(it->first);
    }
    sort(ve.begin(), ve.end());
    for (int i = ve.size()-1; i>=0; i--) {
        printf("%d", ve[i]);
        if (i != 0) printf(" ");
    }
    return 0;
}