正题
题目链接:https://ac.nowcoder.com/acm/contest/7605/B
题目大意
101010个数,nnn个操作交换两个位置的数。mmm次询问操作一段区间后的序列。
解题思路
处理出fi,jf_{i,j}fi,j表示处理了前iii个第jjj位的是哪个数。然后拿fl−1f_{l-1}fl−1和frf_rfr一一对应即可。
时间复杂度O(10n)O(10n)O(10n)
codecodecode
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int N=1e5+10;
int n,m,f[N][10],v[10];
int main()
{scanf("%d%d",&n,&m);for(int i=0;i<10;i++)f[0][i]=i;for(int i=1;i<=n;i++){int a,b;scanf("%d%d",&a,&b);for(int j=0;j<10;j++)f[i][j]=f[i-1][j];swap(f[i][a],f[i][b]);}while(m--){int l,r;scanf("%d%d",&l,&r);for(int i=0;i<10;i++)v[f[l-1][i]]=i;for(int i=0;i<10;i++)printf("%d ",v[f[r][i]]);putchar('\n');}return 0;
}