对于一个 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 ,使用双向链表求解了答案。试补全程序。
#include <iostream>
using namespace std;
const int N = 100010;
int n;
int L[N], R[N], a[N];
int main()
{
cin >> n;
for (int i = 1; i <= n; ++i)
{
int x;
cin >> x;
a[x]=i;//① ;
cout<<"a["<<x<<"]="<<a[x]<<" ";
}
cout<<endl;
for (int i = 1; i <= n; ++i)
{
R[i] = i+1;//② ;
L[i] = i - 1;
cout<<"L["<<i<<"]="<<L[i]<<" ";
}
cout<<endl;
for (int i = 1; i <= n; ++i)
{
cout<<"R["<<i<<"]="<<R[i]<<" ";
}
cout<<endl;
cout<<"-------------------"<<endl;
for (int i = 1; i <= n; ++i) {
cout<<"a["<<i<<"]="<<a[i]<<" ";
}
cout<<endl;
//由a[1]到a[n]从小到大删除
for (int i = 1; i <= n; ++i)
{
L[ R[a[i]]/*③*/ ] = L[a[i]];
R[L[a[i]]] = R[ a[i]/*④*/ ];
cout<< "001:L["<<a[i]<<"]="<<L[a[i]]<<" R["<<a[i]<<"]="<<R[a[i]]<<endl;
cout<<"L["<<R[a[i]]<<"]="<<L[ R[a[i]]/*③*/ ]<<" R["<<L[a[i]]<<"]="<<R[L[a[i]]]<<endl;
//cout<< "002:L["<<a[i]<<"]="<<L[a[i]]<<" R["<<a[i]<<"]="<<R[a[i]]<<endl;
cout<<"**************************"<<endl;
}
for (int i = 1; i <= n; ++i) {
cout << L[i]/*⑤*/ << " ";
}
cout<<endl;
for (int i = 1; i <= n; ++i) {
cout << R[i]/*⑤*/ << " ";
}
cout << endl;
return 0;
}
1.正确答案: a[x] = i
2.正确答案: i+1
3.正确答案: R[a[i]]
4.正确答案: a[i]
5.正确答案: R[i]
相关的链接:
NOIP2018普及组初赛 完善程序 第2题《双向链表》noip2018pujiA4.2 - 知乎
https://www.cnblogs.com/Attention/p/9821031.html
NOIp2018普及组初赛解题报告
NOIP 2018 普及组初赛之程序完善题T2
NOIP 2018 普及组初赛之程序完善题T2_hnjzsyjyj的博客-CSDN博客
备考 | NOIP2018初赛普及组+提高组真题及答案参考!
2018年NOIP普及组完善程序题2—右侧第一个更大值
NOIP 提高组 初赛 四、阅读程序写结果 习题集(五)NOIP2006-NOIP2007
NOIP 提高组 初赛 四、阅读程序写结果 习题集(五)NOIP2006-NOIP2007_mrcrack的博客-CSDN博客
CSP-J CSP-S NOI初赛
2022年暑期及9月份CSP-J1 CSP-S1初赛 培训计划及学习要点
2022年暑期及9月份CSP-J1 CSP-S1初赛 培训计划及学习要点_dllglvzhenfeng的博客-CSDN博客
NOIP普及组2006-2018初赛 2019 CSP-J1 2020 CSP-J1 完善程序题
NOIP2006-2018 提高组 初赛试题完善程序题 CSP-S 2019 2020 初赛试题完善程序题
NOIP2006-2018 提高组 初赛试题完善程序题 CSP-S 2019 2020 初赛试题完善程序题_dllglvzhenfeng的博客-CSDN博客
CSP-J CSP-S 初赛相关的书籍
CSP-J1 CSP-S1 第1轮 初赛 考前强化训练
CSP-J1 CSP-S1第1轮 初赛 如何拿到好成绩(60分及以上)