组合题5 个小题
已作答 0 / 5
对于一个 1 到 n 的排列 P(即 1 到 n 中每一个数在 P 中出现了恰好一次),令 q[i] 为第 i 个位置之后第一个比 P[i] 值更大的位置,如果不存在这样的位置,则 q[i] = n + 1。举例来说,如果 n = 5 且 P 为 1 5 4 2 3 ,则 q 为2 6 6 5 6。
下列程序读入了排列 P ,使用双向链表求解了答案。试补全程序。
1#include <iostream>2using namespace std;3 4const int N = 100010;5int n;6int L[N], R[N], a[N];7 8int main() {9 cin >> n;10 for (int i = 1; i <= n; ++i) {11 int x;12 cin >> x;13 ① ;14 }15 16 for (int i = 1; i <= n; ++i) {17 R[i] = ② ;18 L[i] = i - 1;19 }20 21 for (int i = 1; i <= n; ++i) {22 L[ ③ ] = L[a[i]];23 R[L[a[i]]] = R[ ④ ];24 }25 26 for (int i = 1; i <= n; ++i) {27 cout << ⑤ << " ";28 }29 30 cout << endl;31 return 0;32}①处应填( )