模板题传送门
#include<bits/stdc++.h>
#define ll long long
using namespace std;
const int N=6e6;
ll n,op,f[N],p[N],d[N],ans;
int main() {
scanf("%lld%lld",&n,&op);
if(op==1) {
for (ll i=1; i<n; ++i) {
scanf("%lld",&f[i]);
++d[f[i]];
}
for (ll i=1,j=1; i<=n-2;++i,++j) {
while (d[j]) ++j;
p[i]=f[j];
while (i<=n-2&&!(--d[p[i]])&&p[i]<j)
p[i+1]=f[p[i++]];
}
for (ll i=1;i<=n-2;i++) ans^=i*p[i];
} else {
for (ll i=1; i<=n-2; i++) {
scanf("%lld",&p[i]);
++d[p[i]];
}
p[n-1]=n;
for (ll i=1,j=1; i<n; i++,j++) {
while (d[j]) ++j;
f[j]=p[i];
while (i<n&&!(--d[p[i]])&&p[i]<j)
f[p[i]]=p[++i];
}
for (ll i=1;i<n;i++) ans^=i*f[i];
}
printf("%lld",ans);
return 0;
}
8WA+2RE,样例没有问题。