2018年模板大集合!!!!沒有一個優秀的模板就是等著被摩擦[DP部分]
阿新 • • 發佈:2018-12-12
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]; }