1. 程式人生 > >2018年模板大集合!!!!沒有一個優秀的模板就是等著被摩擦[DP部分]

2018年模板大集合!!!!沒有一個優秀的模板就是等著被摩擦[DP部分]

cdq(樹狀陣列維護的三維偏序問題):

void cdq(int l,int r){
    if(l==r) return ;
    int mid=(l+r)>>1;
    cdq(l,mid);cdq(mid+1,r);
    int i=l,j=mid+1,p=l;
    while (i<=mid || j<=r){ //所有值都加入樹狀陣列,後面再刪掉
        if (j>r || (i<=mid && q2[i].y<=q2[j].y))add(q2[i].z,q2[i].cnt),t[p++]=q2[i++];
        //這裡即便j已經超過r了,左邊的y沒加完,接著加完,只是不計算(j>r)
        else q2[j].sum+=summ(q2[j].z),t[p++]=q2[j++];
    }
    for (i=l; i<=mid; ++i) add(q2[i].z,-q2[i].cnt);
    for(int i=l;i<=r;i++)q2[i]=t[i];
}