显示代码纯文本
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
int dp[100001][36];
int V[100001],P[100001];
int Bit[100001],ans[100001];
int n,m,k,a1,a2,cnt=0,jl=0;
int main()
{
freopen("usaco_Feb_swap.in","r",stdin);
freopen("usaco_Feb_swap.out","w",stdout);
scanf("%d%d%d",&n,&m,&k);
for(int i=1;i<=n;i++)
{
V[i]=i;
}
for(int i=1;i<=m;i++)
{
scanf("%d%d",&a1,&a2);
for(int j=a1;j<=(a1+a2)/2;j++)
{
swap(V[j],V[a2-j+a1]);//在J位上的牛和在A2-J+A1位上的牛.
}
}
for(int i=1;i<=n;i++)
{
dp[V[i]][0]=i;
}
for(int i=1;i<=35;i++)
{
for(int j=1;j<=n;j++)
{
dp[j][i]=dp[dp[j][i-1]][i-1];
}
}
while(k)
{
if(k&1)
{
Bit[++cnt]=jl;
}
jl++;
k>>=1;
}
for(int i=1;i<=n;i++)
{
int x=i;
for(int j=1;j<=cnt;j++)
{
x=dp[x][Bit[j]];
}
ans[x]=i;
}
for(int i=1;i<=n;i++)
{
printf("%d\n",ans[i]);
}
return 0;
}