题意:
给定\(n\)个元素,每个元素有四个属性\(a,b,c,d\),求序列中满足\(a_i< a_j\)且\(b_i< b_j\)且\(c_i< c_j\)且\(d_i< d_j\)的数对\((i,j)\)的个数。
对于\(100%\)的数据,\(1<=n<=50000\),保证所有的\(ai,bi,ci,di\)分别组成四个\(1\)~\(n\)的排列。
思路:
第一维排序。
第二维cdq分治,在保持第二维有序的情况下,记录第一维的顺序(即此元素是否可以更新其他元素或是否可以被更新)
第三维继续cdq分治,维持第三维有序性
第四维在以上的前提下,用树状数组维护统计答案
注意事项:
谨防手残
code:
#include
using namespace std;
const int N=50005;
int n,ans;
struct node{int a,b,c,d,tp;}q[N],tmp1[N],tmp2[N];
inline bool cmp1(node x,node y){return x.a>1;
cdq3d(l,mid);cdq3d(mid+1,r);
int i=l,j=mid+1,cnt2=l;
while(j<=r)
{
while(tmp1[i].c>1;
cdq2d(l,mid);cdq2d(mid+1,r);
int i=l,j=mid+1,cnt1=l;
while(j<=r)
{
while(q[i].b