<font face="逐浪新宋">我是逐浪新宋</font>
<font face="逐浪圆体">我是逐浪圆体</font>
<font face="逐浪花体">我是逐浪花体</font>
<font face="逐浪像素字">我是逐浪像素字</font>
<font face="逐浪立楷">我是逐浪立楷</font>
<font color=red>我是红色</font>
<font color=#008000>我是绿色</font>
<font color=yellow>我是黄色</font>
<font color=Blue>我是蓝色</font>
<font color= #871F78>我是紫色</font>
<font color= #DCDCDC>我是浅灰色</font>
<font size=5>我是尺寸</font>
<font size=10>我是尺寸</font>
<font face="逐浪立楷" color=green size=10>我是逐浪立楷,绿色,尺寸为5</font>
我是逐浪新宋
我是逐浪圆体
我是逐浪花体
我是逐浪像素字
我是逐浪立楷
我是红色
我是绿色
我是黄色
我是蓝色
我是紫色
我是浅灰色
我是尺寸
我是尺寸
我是逐浪立楷,绿色,尺寸为5
???
有效果吗
不是在论坛发
我是逐浪新宋
我是逐浪圆体
我是逐浪花体
我是逐浪像素字
我是逐浪立楷
我是红色
我是绿色
我是黄色
我是蓝色
我是紫色
我是浅灰色
我是尺寸
我是尺寸
我是逐浪立楷,绿色,尺寸为5
???
知乎上好像可以用,因为信友队好像没有markdown
摘要
jjjj
一、链表
1.单向链表
每一个节点分为:数据域、指针域;
第一个节点为头结点, 最后为尾节点。头结点无数据域,尾节点指针域为空;
删除p节点的下一个节点:p->next = p->next->next;
在p节点后插入一个节点s:s->next = p->next; p->next = s;
2.循环链表
特点是表中最后一个节点指针域指向头结点,使链表形成环;
3.双向链表
每一个节点有两个指针域和若干数据域,一个指向前,一个指向后;
优点:访问、插入、删除更快,更方便,以空间换时间;
删除p节点:p->l->r = p->r;p->r->l = p->l;
在p节点后插入节点是:s->r = p->r;p->r->l = s;s->l = p;p->r=s;
4.数组模拟双链表
节点的值:e[i];节点左指针:l[i];节点右指针:r[i];
初始化:r[0] = 1, l[1] = 0;idx = 2;
在k右边插入第idx个数字x:e[idx] = x;r[idx] = r[k];l[idx] = k;l[r[k]] = idx;r[k] = idx;
删除位置k的元素:r[l[k]] = r[k];l[r[k]] = l[k];
二、数据结构与STL
1.栈:只能在某一端插入和删除,具有先进后出的特点;
定义:stack<类型>n;
入栈:n.push(x) O(1);
出栈:n.pop() O(1);
栈顶元素:n.top() O(1);
判空:n.empty() O(1);
元素个数:n.size() O(1);
2.队列:只能从一段入队,另一端出队;
定义:queue<类型> q;
入队:q.push(x);
出队:q.pop();
队首元素:q.front();
队尾元素:q.back();
判空:q.empty();
元素个数:q.size();
3.优先对列
定义:priority_queue<int,vector, greater >q;从小到大;
priority_queueq;从大到小;
入队:q.push(x);
出队:q.pop();
队首元素:q.top();
判空:q.empty();
元素个数:q.size();
4.动态数组
定义:vector<类型> v;
访问:下标访问;
迭代器访问:
for(auto it = v.begin(); it != v.end; it++{
cout << *it << " ";
}
添加元素:v.push_back(x) O(1);
删除尾元素:v.pop_back() O(1);
元素个数:v.size() O(1);
在迭代器it处插入元素:v.insert(it, x) O(n);
删除一个区间的元素:v.erase(v.begin()+x, v.begin()+y) O(n);
清空所有元素:v.clear() O(n);
二维定义:vector v;
5.集合
特点:自动去重、自动排序,可以快速查找、插入和删除元素。
定义:set<类型> s;
访问:迭代器访问:
for(auto it = s.begin(); it != s.end(); it++){
cout << it << " ";
}
插入:s.insert(x) O(logn);
查找:s.find(x) O(lonn);
删除一个区间的元素:s.erase(s.begin()+x, s.begin()+y) O(n);
清空:s.clear() O(n);
返回首个大于等于x的迭代器:s.lower_bound(x);
返回首个大于x的迭代器:s.upper_bound(x);
元素个数:s.size() O(1);
判空:s.empty();
元素的个数:s.count();
6.map
定义:map<类型,类型> mp;
访问:通过键或迭代器;
映射个数:mp.size() O(1);
键为x的迭代器:mp.find(x) O(logn);
删除元素:mp.erase(it);
删除键:mp.erase(x);
清空元素:mp.clear() O(n);
三、尺取、差分、前缀和
1.一维前缀和
预处理:for(int i = 1; i <= n; i++){
cin >> a[i];
sum[i] = sum[i-1] + a[i];
}
计算l到r的和:while(q–){
int l, r;
cin >> l >> r;
cout << sum[r] - sum[l-1];
}
2.二维前缀和
预处理:for(int i = 1; i <= n; i++{
for(int j = 1; j <= m; j++{
cin >> a[i];
sum[i][j] = sum[i-1][j] + sum[i][j-1] - sum[i-1][j-1] + a[i][j];
}
}
计算(x1,y1)到(x2,y2)的和:while(q–){
int x1, y1, x2, y2;
cin >> x1 >> y1 >> x2 >> y2;
cout << sum[x2][y2] - sum[x1-1][y2] - sum[x2][y1-1] + sum[x1-1][y1-1] << endl;
}
3.一维差分
预处理:for(int i = 1; i <= n; i++){
cin >> a[i];
d[i] = a[i] - a[i-1];
}
把a[l]到a[r]+c:while(q–){
int l, r, c;
cin >> l >> r >> c;
d[l] += c;
d[r+1] -= c;
}
输出:for(int i = 1; i <= n; i++){
a[i] = d[i-1] + d[i];
cout << a[i] << " ";
}
4.二维差分
预处理:for(int i = 1; i <= n; i++){
for(int j = 1; j <= m; j++){
d[i][j] = a[i][j] - d[i-1][j] - d[i][j-1] + a[i-1][j-1];
}
}
改变差分数组:while(q–){
int x1, y1, x2, y2;
cin >> x1 >> y1 >> x2 >> y2;
d[x1][y1] += c;
d[x2+1][y1] -= c;
d[x1][y2+1] -= c;
d[x2+1][y2+1] += c;
}
输出:for(int i = 1; i <= n; i++){
for(int j = 1; j <= m; j++){
d[i][j] += d[i-1][j] + d[i][j-1] - d[i-1][j-1];
}
}
四、二分答案
1.两种模板
bool check(int x){
/
验证mid是否合法
/
int main(){
/
输入数据
/
//排序处理
/
int l = (), r = (), mid;
while(l < r){
mid = (l + r) / 2(或mid = (l + r + 1) / 2);
if(check(mid)){
//缩小左(右)边界;
}else{
//缩小右(左)边界;
}
}
cout << l(或r);
五、搜索
1.深搜
DFS的主要思路是从一个未访问的地方开始,沿着一条路一直走到底,然后从这条路的尽头退回上一个地点,再从另一条路开始走到底,运用的是递归算法。
DFS模板:
void dfs(/坐标,步数/){
if(符合条件){
cout << 答案;
return;//递归出口;
}
for(/选择该阶段的所有可访问的位置/){
if(/判断合法性/){
//标记该位置;
dfs(/下一个位置/);
//还原访问现场;
}
}
2.广搜
BFS,指的是从一个未遍历的起点出发,先遍历相邻的位置,再依次遍历相邻位置的相邻位置,运用的是队列。
BFS模板
void bfs(){
queueq;
q.push(node{});
while(q.size() > 0){
node now = q.front();
q.pop();
if(下一个可以走){
q.push();
}
}
}
额。。。。
[/s]删除线[/s]
下划线
信友队有啊
是的,刚刚不就是吗
那你咋说没有
我试过了,在Markdown编译器里字体不起作用,其他都有用
(诶对了,这个不是html5嘛
牛![]()
为什么我根本看不懂你们在说什么

