求并集
求两个有序链表的并集
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;