这道题自己出的,有人会吗(我写了代码,有大佬帮我debug吗)

 Help me debug

#include   
#include   
#include   
using namespace std;  
  
int main() {  
    int n, q;  
    cin >> n >> q;  
    vector> qs(n);  
    for (int i = 0; i < n; i++) {  
        qs[i].push_back(i);  
    }  
    while (q--) {  
        int op, a, b;  
        cin >> op >> a >> b;  
        if (op == 1) { // 在第a个队列末尾加入元素b  
            qs[a].push_back(b);  
        } else if (op == 2) { // 在第a个队列开头加入元素b  
            qs[a].push_front(b);  
        } else { // 把第b个队列拼到第a个队列后面  
            vector temp;  
            // 将 deque 的元素转换为 vector  
            for (int i = 0; i < qs[b].size(); i++) {  
                temp.push_back(qs[b][i]);  
            }  
            qs[a].insert(qs[a].end(), temp.begin(), temp.end());  
            // 清空 deque  
            qs[b].clear();  
        }  
    }  
    vector ans;  
    for (int i = 0; i < n; i++) {  
        ans.insert(ans.end(), qs[i].begin(), qs[i].end());  
    }  
    for (int i = 1; i < ans.size(); i++) {  
        if (ans == qs[i]) {  
            ans = qs[0];  
            break;  
        }  
    }  
    for (int i = 0; i < ans.size(); i++) {  
        cout << ans[i] << " ";  
    }  
    return 0;  
}

题目名称:队列增长

时间限制:3000ms

内存限制:128MB

题目描述

n个双端队列,所有队列只有一个初始元素,第i个队列的初始元素就是i
接下来有q次操作,操作有三种:

  • 1 a b:在第a个队列末尾加入元素b。

  • 2 a b:在第a个队列开头加入元素b。

  • 3 a b:把第b个队列拼到第a个队列后面。第b个队列直接消失,在后面的操作里不会再出现。(在这种操作中,数据保证a \neq b

最后输出最长的队列的所有元素,从队头到队尾。如果有多个最长的队列,输出编号最小的那个。

输入描述

第一行输入两个整数nq.

下面�q行中每行输入三个整数,代表一组操作。含义见题目描述。

输出描述

输出一行,为最长队列的所有元素

样例1

输入

2 3

1 1 2

2 2 3

3 1 2

输出

1 2 3 2

提示

对于40%的数据,n,q\leq 10^{3}.
对于另外20%的数据,只有操作1和2。
对于100%的数据,n,q\leq 10^{6},队列中的元素绝对值不超过10^{9}

你可能感兴趣的:(c++)