专栏文章

noip基础复习

个人记录参与者 1已保存评论 0

文章操作

快速查看文章及其快照的属性,并进行相关操作。

当前评论
0 条
当前快照
1 份
快照标识符
@mir34mi2
此快照首次捕获于
2025/12/04 14:58
3 个月前
此快照最后确认于
2025/12/04 14:58
3 个月前
查看原文

tip:难度无先后顺序,按楼主自己的复习顺序为标准

1 并查集

初始化

CPP
void init(int n){
	for(int i=1;i<=n;i++){
		fa[i]=i;
	}
}

查询(路径压缩版)

CPP
int find(int n){
	return n==fa[n]?n:(fa[n]=find(fa[n]));
}

合并

CPP
void merge(int i, int j) {
	fa[find(i)]=find(j);
}

按序合并(启发式合并)

CPP
void merge(int i, int j) {
	int x = find(i), y = find(j);
	if (rank[x] <= rank[y])
		fa[x] = y;
	else
		fa[y] = x;
	if (rank[x] == rank[y] && x != y)
		rank[y]++;
}

2二分

二分查找

CPP
int find(int q){
  int l=0,r=n+1;//开区间
  while(l+1<r){ //l+1=r时结束
    int mid=l+r>>1;
    if(a[mid]>=q) r=mid; //最小化
    else l=mid;
  }
  return a[r]==q ? r : -1;
}

二分答案

主要是在二分查找上加了一个check函数用来判断答案的合法性,每个题目都不一样,要复习的话以刷题为主这里贴几道经典的题目

3区间dp和dp的单调队列优化

单调队列基本操作

CPP
empty()//为空返回真
pop()  //删队顶元素
push() //入队一个元素
size() //返回个数
top() //返回队顶元素

大根堆

CPP
priority_queue<int> q;

小根堆

CPP
priority_queue<int,vector<int>,greater<int>>

find:

顺序查找。find(v.begin(), v.end(), value),其中 value 为需要查找的值。

reverse:

翻转数组、字符串。reverse(v.begin(), v.end()) 或 reverse(a + begin, a + end)。

unique

去除容器中相邻的重复元素。unique(ForwardIterator first, ForwardIterator last),返回值为指向 去重后 容器结尾的迭代器,原容器大小不变。与 sort 结合使用可以实现完整容器去重。

dp要说什么,自己刷呗.....

*不定期更新

评论

0 条评论,欢迎与作者交流。

正在加载评论...