2023-10-29 闲话

发布时间 2023-10-29 19:51:57作者: yspm

今天 vp 了 ccpc2021 哈尔滨。开场两个半小时冲进了原榜前三,一度领先 “【数据删除】之日我是【数据删除】” 队。后来出了一些奇怪的问题。最后想出来的 L cyh 的根号做法没调出来。赛后看了一下这个 L 的题解,气得直跺脚。

有闲心的你可以去 gym 上找来做做,气死我了真的是。

下面这份代码为什么不能求出来(排列 a 变成 b 的交换次数)的奇偶性。因为一开始 a 中的数形成的集合和 b 中的数字形成的集合是一样的,所以离散化了一下。

这个代码树状数组什么的全都不改,直接变成 (a 的逆序对数 + b 的逆序对数 )的奇偶性就对了。

int n=read(); 
vector<int> a(n),b(n);
for(int i=0;i<n;++i) a[i]=read();
for(int i=0;i<n;++i) b[i]=read();
map<int,int> mp;
for(int i=0;i<n;++i) A[a[i]]=1;
int uni=0;//离散化之后的数字个数
for(auto &t:A) t.second=uni++;
int C=0;//表示 b 中现在考虑的是第几个元素。
for(auto &t:b) t=A[t],p[t]=C++;
for(auto &t:a) t=p[A[t]];//对于 A 中的一个数,求这个数在 b 中的出现位置。
T.init(C);
int cnt=0;
for(auto t:a) cnt+=T.query(t),T.insert(t);//Fenwick Tree操作

反正我和 gjk 俩人盯了半个多小时没看出来有啥问题。

看出来有啥问题请务必评论,谢谢。