刷题总结(9.17)

1.火柴排队(洛谷P1966)

1.逆序对的求法之一——归并排序

模板:

void msort(int l,int r){
	if(l==r) return;
	int mid=(l+r)/2;
	msort(l,mid);
	msort(mid+1,r);
	int i=l,j=mid+1,k=l;
	while (i<=mid&&j<=r){
		if(c[i]>c[j]) {
			ans=(ans+1ll*(mid-i+1))%mod; //一般逆序对数量都会超int,注意用long long
			temp[k++]=c[j++];
		}
		else temp[k++]=c[i++];
	}
	while (i<=mid) {
		temp[k++]=c[i++];
	}
	while (j<=r){
		temp[k++]=c[j++];
	}
	for(int s=l;s<=r;s++){
		c[s]=temp[s];
	}
}

2.如何以一个数组为关键字,“排序”另一个数组:

新建一个数组c[maxm]

核心代码c[a[i]]=b[i];

c[i]中不符合c[i]=i的都需要调整。

2.ORXOR(abc197c)

Tip1:数据中n较小时跑暴力!!

Tip2:通过位运算暴力搜索:

可用于如总情况为2的n次幂,即该情况本质可看作每一个是否选择的问题,如

1.集合子集 2.n个数据分成多个连续组(>=1个)(可视为是否在间隙分割)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值