【CSDN周赛15期】

求并集

求两个有序链表的并集

O(n)做法是双指针扫一遍,比赛时可以排序+去重O(nlogn)写起来简单一些

sort(v.begin(),v.end());
v.erase(unique(v.begin(),v.end()),v.end());

小T找糖豆

给n个数,求[1,1e18]区间去掉这些数后,[X,1e18]这个区间最小值

等价于求这n个数最大值,答案是最大值+1


争风吃醋的豚鼠

N个节点两两建边。
不存在3个节点相互之前全部相连。(3个节点连接成环)
最多能建立多少条边?

不成环看作二分图即可,最多情况就是两边各n/2个点,然后依次连边,
所以答案为(n+1)/2*n/2


选择客栈

题目来源:NOIP2011提高组

统计前缀客栈每种装修风格的数量,然后枚举右边一个人住店的位置,不断更新答案即可

	cin>>n>>_>>p;//颜色数没有用
	int col,price;
	int pos=0;
	for(int i=1;i<=n;i++)
	{
		cin>>col>>price;
		if(price<=p) 
			pos=i;//pos表示最近的一个满足条件的咖啡店
		if(pos>=lst[col])//更新与col风格相同的可选住店位置数
			sum[col]=cnt[col];
		ans+=sum[col];
		lst[col]=i;//上一次col这种风格的位置更新为i
		cnt[col]++;
	}
	cout<<ans;

你可能感兴趣的:(CSDN竞赛,链表,数据结构)