Description

题目传送门:P10522 [XJTUPC2024] 雪中楼

由于 $n \le 2 \times 10^5$,插入次数太多,考虑维护链表。

Analysis

对于每次操作,输入 $a_i$,若 $i=0$ 就将 $a_i$ 插到链表尾部,否则插到 $a_i$ 左边,最后翻转完输出,就这么简单。

Code

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
#include <bits/stdc++.h>
using namespace std;

#define MAXN 2e5 + 10

list <int> l;
list <int> :: iterator number[int(MAXN)] =
{
l.begin() , l.end()
};

main()
{
int n;
cin >> n;

for(int i = 1 ; i <= n ; i ++)
{
int x;
cin >> x;

number[i] = l.insert(number[x] , i); //插入函数
}

reverse(l.begin() , l.end()); //翻转

for(list <int> :: iterator it = l.begin() ; it != l.end() ; it ++) // 迭代器
{
cout << *it << " ";
}
return 0;
}