1 solutions

  • 0
    @ 2025-5-5 16:14:49

    使用手写双向链表即可,利用数组进行模拟,然后用 prenxt 记录数组下标即可,然后模拟过程会方便很多。

    如果要维护的内容更为复杂,可以将 prenxt 这些都封装在一个结构体当中。

    #include <stdio.h>
    #define maxn 1000010
    int n, m;
    int op, x, y;
    int nxt[maxn], pre[maxn];
    void init(int n)
    {
        int i = 0;
        for (i = 1; i <= n; ++i) nxt[i] = i + 1, pre[i] = i - 1;
        pre[n + 1] = n, nxt[0] = 1;
    }
    void rem(int x)
    {
        int l = pre[x], r = nxt[x];
        nxt[l] = r, pre[r] = l;
        nxt[x] = pre[x] = 0;
    }
    void ins(int x, int y)
    {
        nxt[y] = nxt[x], pre[nxt[x]] = y;
        pre[y] = x, nxt[x] = y;
    }
    int main()
    {
        scanf("%d%d", &n, &m);
        init(n);
        while (m--)
        {
            scanf("%d%d", &op, &x);
            if (op & 1) rem(x);
            else scanf("%d", &y), ins(x, y);
        }
        int node = nxt[0];
        while (node != n + 1) printf("%d ", node), node = nxt[node];
    }
    

    Information

    ID
    20
    Time
    1000ms
    Memory
    512MiB
    Difficulty
    1
    Tags
    # Submissions
    82
    Accepted
    18
    Uploaded By