标签(空格分隔): 课堂笔记
采用了分治思想的例子:快速排序,归并排序。
归并排序:
void mergesort(int l,int r)
{
if(l==r)return ;
int mid = l+r>>1;
mergesort(l,mid);
mergesort(mid+1,r);
int i = l, j = mid + 1, tot = l-1;
while(i<=mid&&j<=r)
{
if(j==r||a[i]<=a[j])
tmp[++tot] = a[i++];
else
tmp[++tot] = a[j++];
for(int i = 1; i <= r; i++){
a[i] = tmp[i];
}
}
}
头疼掉线了,之后补。
给你A,B,C,求A的B次方模C的余数
A,C<=10^9,B<=10^18
[原题模板题][1]
听不懂
[1]: https://www.luogu.com.cn/problem/P1226
相传在一个国家,有一座宫殿。宫殿里有个四四方方的格子迷宫,国王选择驸马的方法非常特殊,也非常简单:公主就站在其中一个方格子上,只要谁能用地毯将除公主站立的地方外的所有地方盖上,美丽漂亮聪慧的公主就是他的人了。公主这一个方格不能用地毯盖住,毯子的形状有所规定,只能有四种选择(如下所示):
11 11 10 01
10 01 11 11
并且每一方格只能用一层地毯,迷宫的大小为(2^K)*(2^K)的方形。
请你给出一种方案
分而治之
递归进行,将大块分成四个小块,公主必然在四个之中某一个,对于剩下的三个,铺一块能遮住三个各一块,将遮住的想象成公主,继续向下递归求解。
是很巧妙的求法。
晚上老师会补充代码(看他咕不咕)
给你一个长度为N的序列,要求你求出其中的第k小元素
1<=K<=N<=2000000
※不可以直接排序再找第k小,这道题只允许O(N)算法
1、对快速排序进行修改
2、好像有个stl的函数
引自某大佬:在c++的stl库中,提供了nth_element这样一个函数
它的用法是nth_element(a+l,a+k,a+r)
这样它会使a这个数组中区间[l,r)内的第k小的元素处在第k个位置上(相对位置)
但是它并不保证其他元素有序。
stl万岁!
原文:https://www.cnblogs.com/qmings/p/12204980.html