对CDQ分治的一些见解
来源:互联网 发布:朝鲜拥核 知乎 编辑:程序博客网 时间:2024/04/30 08:55
引述
序列中,对于每个i,统计满足
这里只给出分治部分的代码,结构体声明、排序和树状数组请读者自行完成
快排法代码
void cdq(int l=1,int r=cnto){ int p1=l; int p2=mid+1; for(int i=l;i<=r;i++) { if(o[i].t<=mid&&!o[i].qid) bit.add(o[i].b,1); if(o[i].t>mid&&o[i].qid) ans[o[i].qid]+=bit.getsum(o[i].b); } for(int i=l;i<=r;i++) if(o[i].t<=mid&&!o[i].qid) bit.add(o[i].b,-1); for(int i=l;i<=r;i++) if(o[i].t<=mid) aux[p1++]=o[i]; else aux[p2++]=o[i]; for(int i=l;i<=r;i++) o[i]=aux[i]; if(l<mid)cdq(l,mid); if(mid+1<r)cdq(mid+1,r);}
归并法代码
声明:此份代码非博主本人完成,仅供参考和理解
void solve(int l,int r){ int mid; int f1; int f2; if(l==r) return; mid=(l+r)>>1; solve(l,mid); solve(mid+1,r); for(f1=l,f2=mid+1;(f1<=mid)&&(f2<=r);) if(szp[f1].x<=szp[f2].x) { if(szp[f1].l==0) adds(szp[f1].y,szp[f1].d); f1++; } else { if(szp[f2].l!=0) sza[szp[f2].d]+=gets(szp[f2].y)*szp[f2].l; f2++; } for(;f2<=r;f2++) if(szp[f2].l!=0) sza[szp[f2].d]+=gets(szp[f2].y)*szp[f2].l; for(f1--;f1>=l;f1--) if(szp[f1].l==0) adds(szp[f1].y,-szp[f1].d); totn=l; for(f1=l,f2=mid+1;(f1<=mid)&&(f2<=r);) if(szp[f1].x<=szp[f2].x) szn[totn++]=szp[f1++]; else szn[totn++]=szp[f2++]; for(;f1<=mid;f1++) szn[totn++]=szp[f1]; for(;f2<=r;f2++) szn[totn++]=szp[f2]; for(f1=l;f1<=r;f1++) szp[f1]=szn[f1]; return;}
完结撒花
2 1
- 对CDQ分治的一些见解
- [CDQ分治与整体二分]个人对CDQ分治与整体二分的理解
- [CDQ分治与整体二分]个人对CDQ分治与整体二分的理解
- 对 "闭包-closure" 的一些见解
- 对oracle 触发器的一些见解
- 对office word 2010的一些见解
- 对安卓中Handle机制的一些见解
- 对Hash表的一些见解
- 对Java异常分析的一些见解
- BZOJ 3295 动态逆序对 CDQ分治
- [BZOJ3295] [Cqoi2011]动态逆序对 && CDQ分治
- 【CDQ分治】[CQOI2011][NKOJ2041]动态逆序对
- 【cdq分治】[HYSBZ/BZOJ3295]动态逆序对
- 3295: [Cqoi2011]动态逆序对 CDQ分治
- 【bzoj3295】动态逆序对 CDQ分治
- bzoj 3295 动态逆序对 CDQ分治
- CQOI2011动态逆序对--cdq分治
- BZOJ 3295 动态逆序对 CDQ分治
- vmware 后台运行ubuntu
- leetcode 481. Magical String python
- C/C++ 笔试面试(2)——二分查找
- CCF送货 欧拉路的判断+Fleury算法输出欧拉路的字典序最小的路径
- (精)数据库分库分表
- 对CDQ分治的一些见解
- linux的进程间通信——信号量
- xx
- bzoj1031 球形空间产生器sphere [高斯消元]
- MySQL配置
- C++与JAVA多态相同与不同
- C/C++ 笔试面试(1)—— sizeof
- linux的atexit()函数
- 我们的敏捷之路——故事篇