1 条题解
-
2
输入要求中有一句重点:保证输入的询问序列 单调递增。我们可以转变思路,从“让 来找第 趟”变成“让第 趟去找”。说白了,跑 趟,如果在第 趟时, 了,那就把此时跑的结果亮出来,由于 单调递增,所以顺序一定不会出错。
在具体实现上,我们给每一个数标号,每次交换时,我们同步把标号也变化了,就能做到每次选择交换复杂度 O(1)
#include<bits/stdc++.h> using namespace std; int n,m,a[100005],q[15],biao[100005],cnt=1; int main(){ cin>>n>>m; for(int i=1;i<=n;i++) cin>>a[i]; for(int i=1;i<=m;i++) cin>>q[i]; for(int i=1;i<=n;i++) biao[a[i]]=i; for(int i=1;i<=n;i++){ biao[a[i]]=biao[i]; swap(a[biao[i]],a[i]); biao[i]=i; if(i==q[cnt]){ cnt++; for(int j=1;j<=n;j++) cout<<a[j]<<" "; cout<<endl; } } return 0; }
- 1
信息
- ID
- 764
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 6
- 标签
- 递交数
- 66
- 已通过
- 22
- 上传者