样例没有问题,实在调不出来了,请教大佬
悬2关
#include<iostream>
#include<vector>
#define rep(a,b,c) for(int (a)=(b);(a)<=(c);(a)++)
#define req(a,b,c) for(int (a)=(b);(a)>=(c);(a)--)
#define pii pair<int,int>
#define ll long long
#define ull unsigned ll
using namespace std;
const int N=2e5+5;
vector<ll> c[N];
ll a[N],n,k,cur,vis[N],ne[N];
ll fsp(ll a,ll b,ll p){
ll ans=1;
while(b){
if(b%2){
ans=(ans*a)%p;
}
a=(a*a)%p;
b/=2;
}
return ans;
}
void dfs(int now,int i){
if(now==i){
return;
}
c[cur].push_back(now);
vis[now]=cur;
dfs(a[now],i);
}
int main(){
cin>>n>>k;
rep(i,1,n){
cin>>a[i];
}
rep(i,1,n){
if(!vis[i]){
c[++cur].push_back(i);
vis[i]=cur;
dfs(a[i],i);
}
}
rep(i,1,cur){
ll now=k%c[i].size();
rep(j,0,c[i].size()-1){
ll y=fsp(2,now,c[i].size());
ll x=(j+y)%c[i].size();
ne[c[i][j]]=c[i][x];
}
}
rep(i,1,n){
cout<<ne[i]<<" ";
}
return 0;
}