比较函数
内嵌基本用法:
struct node
{
int l, r;
bool operator< (const node &v)const{
return r < v.r;
}
} v[maxn];
结构体内嵌比较函数后可以直接sort(v, v+n);
和直接写一个比较的函数类似:
bool cmp(node a,node b){
return a.r<b.r;
}
再用sort(v, v+n, cmp)即可;
例如 结合优先队列的用法:
struct node
{
int l, r;
bool operator < (const node &v)const
{
return r > v.r;
}
};
priority_queue<node> q;
sort默认为从小到大排序,优先队列默认为从大到小。
所以这个优先队列是按r小的优先出队,因为根据结构体定义r小的node大
1 (merge-sorted-array)给出两个有序的整数数组A和B,请将数组B合并到数组A中,变成一个有序的数组
注意:
可以假设A数组有足够的空间存放B数组的元素,A和B中初始的元素数目分别为m和n
class Solution {
public:
void merge(int A[], int m, int B[], int n) {
int cur=m+n-1,p=m-1,q=n-1;
while(p>=0&&q>=0){
A[cur--]=A[p]>=B[q]?A[p--]:B[q--];
}
while(q>=0){
A[cur--]=B[q--];
}
}
};
1. (数组中的逆序对)
class Solution {
public:
int merge(vector<int>& nums,int l,int r){
if(l>=r)return 0;
int mid=(l+r)>>1;
int res=merge(nums,l,mid)+merge(nums,mid+1,r);
int i=l,j=mid+1;
vector<int> temp;
while(i<=mid&&j<=r){
if(nums[i]<=nums[j])temp.push_back(nums[i++]);
else {
temp.push_back(nums[j++]);
res+=mid-i+1;
}
}
while(i<=mid)temp.push_back(nums[i++]);
while(j<=r)temp.push_back(nums[j++]);
i=l;
for