标签:偏序 数对 随笔 cap 个数 三维 两维 nlogn
我们设三维分别为 \(a,b,c\),以及 \(S_1=\{(i,j)|a_i<a_j\},S_2=\{(i,j)|b_i<b_j\},S_3=\{(i,j)|c_i<c_j\}\)
在这里先假设 \(a,b,c\) 都是排列,也就是不存在相同的数
那么要求的就是 \(|S_1\cap S_2\cap S_3|\)
我们考虑求出来 \(A=|S_1\cap S_2|+|S_2\cap S_3|+|S_3\cap S_1|\),这个就是三次二维偏序,\(O(n\log n)\)
然后我们发现
- 对于一组三维偏序,我们把它算了三遍
- 对于那些只有两维是偏序的数对,我们把它算了一遍。
- 对于剩下的那些数对,贡献为 \(0\)
由对称性可以发现前两种数对的个数之和(每个只算一遍)与后面两种数对之和相等
所以「偏了三维」和「偏了两维」的数对个数恰好是所有数对个数的一半,也就是 \(\frac{n(n-1)}{2}\)
所以我们把这些都减掉,再除以二就是三维偏序的个数了
为什么前两种数对个数之和与后两种数对个数之和相等呢
如果 \((i,j)\) 构成一个三维偏序,那么 \((j,i)\) 一定是那些三维都不偏序的数对中的一个
类似地如果 \((i,j)\) 偏了两维,那么 \((j,i)\) 肯定只偏一维
所以这个就是对称的,自然相等
标签:偏序,数对,随笔,cap,个数,三维,两维,nlogn 来源: https://www.cnblogs.com/YunQianQwQ/p/16364951.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。