标签:sort orz int 分治 mid merge CDQ cdq
没想到有一天我这样的菜鸡也会学CDQ分治
绝大部分内容来自【洛谷日报#115】CDQ分治和整体二分,如有雷同,不是巧合
- CDQ分治是一种基于分治思想的离线算法,能吊打在线解法
前置芝士:分治
- 经典例子:归并排序(逆序对)
- 众所周知,归并排序是每次将区间[l,r]拆分成[l,mid],[mid+1,r],然后再\(O(n)\)合并两个有序数组,再将[l,r]的答案传到上层,可得时间复杂度为\(O(nlogn)\)
void merge_sort(int l,int r){
if(l==r)return ;
int mid=(l+r)>>1;
merge_sort(l,mid);
merge_sort(mid+1,r);
int p=l,q=mid+1,cnt=l;
while(p<=mid&&q<=r)
if(t[p]<=t[q])t[cnt++]=a[p++];
else t[cnt++]=a[q++];
while(p<=mid)
t[cnt++]=a[p++];
while(q<=r)
t[cnt++]=a[q++];
for(int i=l;i<=r;i++)a[i]=t[i];
}
标签:sort,orz,int,分治,mid,merge,CDQ,cdq 来源: https://www.cnblogs.com/wuchen-place/p/15093673.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。