文章目录

  • 模板
  • P6136 【模板】普通平衡树(数据加强版)
  • 文艺平衡树
  • 可持久化平衡树
  • 书架
  • P3850 [TJOI2007]书架

模板

自己用的可持久化Treap的板子, 改掉split的可持久化就可以当成普通的来用了。

// 使用前插入-INF, 和INF。若不需插入,涉及的排名的地方有加一减一的问题 普通版fhq-treap在split中去掉可持久化就可以。
struct fhq_Treap{ struct { int val, siz, l, r, rnd;}T[N*60]; int cnt, x, y, z;void up(int rt) { T[rt].siz = 1 + T[T[rt].l].siz + T[T[rt].r].siz;} int new_node(int x) { T[++cnt].val = x;T[cnt].rnd = rand();T[cnt].siz = 1;return cnt;} void split(int rt, int k, int &x, int &y) { if(!rt) return x = y = 0, void(0);if(T[rt].val <= k) {x = ++cnt; T[x] = T[rt];split(T[x].r, k, T[x].r, y);up(x);} else { y = ++cnt; T[y] = T[rt];split(T[y].l, k, x, T[y].l);up(y);} } int merge(int x, int y) { if(!x || !y) return x^y;if(T[x].rnd < T[y].rnd) { T[x].r = merge(T[x].r, y);up(x); return x;} T[y].l = merge(x, T[y].l);up(y); return y;}void insert(int &rt, int val) {split(rt, val-1, x, y);rt = merge(merge(x, new_node(val)), y);}void del(int &rt, int val) {split(rt, val-1, x, y);split(y, val, z, y);z = merge(T[z].l, T[z].r);rt = merge(merge(x, z), y);}int _rank(int rt, int val) {int ans = 0;while(rt) {if(val < T[rt].val) rt = T[rt].l;else if(val == T[rt].val) {while(T[T[rt].l].val == val) cout << T[rt].val << endl,  rt = T[rt].l;return ans + T[T[rt].l].siz;}else ans += T[T[rt].l].siz + 1, rt = T[rt].r;}return ans;}// 注意k要加1 int _kth(int rt, int k) {while(rt) {if(T[T[rt].l].siz >= k) rt = T[rt].l;else if (T[T[rt].l].siz + 1 == k) return T[rt].val;else k -= T[T[rt].l].siz + 1, rt = T[rt].r;}return INF;}int pre(int rt, int val) {int ans = -INF;while(rt) { if(val == T[rt].val) {if(T[rt].l) {rt = T[rt].l;while(T[rt].r) rt = T[rt].r;ans = T[rt].val;} break;}if(T[rt].val < val && ans < T[rt].val) ans = T[rt].val;rt = val < T[rt].val ? T[rt].l : T[rt].r;} return ans;}  int nxt(int rt, int val) {int ans = INF;while(rt) { if(val == T[rt].val) {if(T[rt].r) {rt = T[rt].r;while(T[rt].l) rt = T[rt].l;ans = T[rt].val;} break;}if(T[rt].val > val && ans > T[rt].val) ans = T[rt].val;rt = val > T[rt].val ? T[rt].r : T[rt].l;} return ans;}
}Tr;

P6136 【模板】普通平衡树(数据加强版)

普通平衡树
其实对于非删除插入操作都可以迭代求答案,不调用split。

#include<bits/stdc++.h>
using namespace std;
typedef long long LL;
const int INF = 0x3f3f3f3f;
const double Pi = acos(-1);
namespace {template <typename T> inline void read(T &x) {x = 0; T f = 1;char s = getchar();for(; !isdigit(s); s = getchar()) if(s == '-') f = -1;for(;  isdigit(s); s = getchar()) x = (x << 3) + (x << 1) + (s ^ 48);x *= f;}
}
#define fio ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);
#define _for(n,m,i) for (register int i = (n); i <  (m); ++i)
#define _rep(n,m,i) for (register int i = (n); i <= (m); ++i)
#define _srep(n,m,i)for (register int i = (n); i >= (m); i--)
#define _sfor(n,m,i)for (register int i = (n); i >  (m); i--)
#define lson rt << 1, l, mid
#define rson rt << 1 | 1, mid + 1, r
#define lowbit(x) x & (-x)
#define pii pair<int,int>
#define fi first
#define se second
const int N = 2e6+5;
int val[N], ch[N][2], siz[N], rnd[N], q[N];
int root, cnt, x, y, z, an, tot;
void up(int rt) { siz[rt] = 1 + siz[ch[rt][0]] + siz[ch[rt][1]];
}
int new_node(int x) {int new_cnt = tot ? q[tot--] : ++cnt;val[new_cnt] = x;siz[new_cnt] = 1;rnd[new_cnt] = rand();ch[new_cnt][0] = ch[new_cnt][1] = 0;// cout << "debug:  " << new_cnt << endl;return new_cnt;
}
void split(int rt, int a, int &x, int &y) {if(!rt) x = y = 0;else {if(val[rt] <= a) x = rt, split(ch[rt][1], a, ch[rt][1], y);else y = rt, split(ch[rt][0], a, x, ch[rt][0]);up(rt);}
}
int merge(int x, int y) {if(!x || !y) return x + y;if(rnd[x] < rnd[y]) {ch[x][1] = merge(ch[x][1], y);up(x); return x;} else {ch[y][0] = merge(x, ch[y][0]);up(y); return y;}
}
void insert(int a) {split(root, a, x, y);root = merge(merge(x, new_node(a)), y);
}
void del(int a) {split(root, a, x, y);split(x, a-1, x, z);q[++tot] = z;z = merge(ch[z][0], ch[z][1]);root = merge(merge(x, z), y);
}
int _rank(int a) {split(root, a-1, x, y);an = siz[x] + 1;root = merge(x, y);return an;
}
int _kth(int rt, int k) {while(rt) {if(k <= siz[ch[rt][0]]) rt = ch[rt][0];else if(k == siz[ch[rt][0]] + 1) return val[rt];else k -= siz[ch[rt][0]]+1, rt = ch[rt][1];}
}
int pre(int a) {split(root, a-1, x, y);an = _kth(x, siz[x]);root = merge(x, y);return an;
}
int nxt(int a) {split(root, a, x, y);an = _kth(y, 1);root = merge(x, y);return an;
}
int main() { srand(time(0));int n,m, op, a, la = 0, ans = 0; read(n); read(m);while(n--) {read(a); insert(a);}while(m--) { read(op); read(a);a ^= la;if(op == 1) insert(a);else if(op == 2) del(a);else if(op == 3) la = _rank(a),ans ^= la;else if(op == 4) la = _kth(root, a), ans ^= la;else if(op == 5) la = pre(a), ans ^= la;else la = nxt(a), ans ^= la;} printf("%d\n", ans);
}

文艺平衡树

文艺平衡树

#include<bits/stdc++.h>
using namespace std;
typedef long long LL;
const int INF = 0x3f3f3f3f;
const double Pi = acos(-1);
namespace {template <typename T> inline void read(T &x) {x = 0; T f = 1;char s = getchar();for(; !isdigit(s); s = getchar()) if(s == '-') f = -1;for(;  isdigit(s); s = getchar()) x = (x << 3) + (x << 1) + (s ^ 48);x *= f;}
}
#define fio ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);
#define _for(n,m,i) for (register int i = (n); i <  (m); ++i)
#define _rep(n,m,i) for (register int i = (n); i <= (m); ++i)
#define _srep(n,m,i)for (register int i = (n); i >= (m); i--)
#define _sfor(n,m,i)for (register int i = (n); i >  (m); i--)
#define lson rt << 1, l, mid
#define rson rt << 1 | 1, mid + 1, r
#define lowbit(x) x & (-x)
#define pii pair<int,int>
#define fi first
#define se second
const int N = 1e5+5;
int ch[N][2], siz[N], val[N], rnd[N], lazy[N];
int cnt, root;
int new_node(int x) {val[++cnt] = x;siz[cnt] = 1;rnd[cnt] = rand();return cnt;
}
void up(int rt) {siz[rt] = 1 + siz[ch[rt][0]] + siz[ch[rt][1]];
}
void down(int rt) {swap(ch[rt][0], ch[rt][1]);if(ch[rt][0]) lazy[ch[rt][0]] ^= 1;if(ch[rt][1]) lazy[ch[rt][1]] ^= 1;lazy[rt] = 0;
}
void split(int rt, int k, int &x, int &y) {if(!rt) return x = y = 0, void (0);if(lazy[rt]) down(rt);if(siz[ch[rt][0]] < k) x = rt, split(ch[rt][1], k - siz[ch[rt][0]]-1, ch[rt][1], y);else y = rt, split(ch[rt][0], k, x, ch[rt][0]);up(rt);
}
int merge(int x, int y) { if(!x || !y) return x + y;if(rnd[x] < rnd[y]) {if(lazy[x]) down(x);ch[x][1] = merge(ch[x][1], y);up(x); return x;}if(lazy[y]) down(y);ch[y][0] = merge(x, ch[y][0]);up(y); return y;
}
void print(int rt) { if(!rt) return ;if(lazy[rt]) down(rt);print(ch[rt][0]);printf("%d ", val[rt]);print(ch[rt][1]);
}
int main() { srand(time(0));int n, m, x, y, z, l, r; read(n); read(m);_rep(1, n, i) root = merge(root, new_node(i));while(m--) { scanf("%d %d", &l, &r);split(root, l-1, x, y);split(y, r-l+1, y, z);lazy[y] ^=  1;root = merge(x, merge(y, z));} print(root);
}

可持久化平衡树

可持久化平衡树。跑完发现比主席树慢。

#include<bits/stdc++.h>
using namespace std;
typedef long long LL;
const int INF = 2147483647;
const double Pi = acos(-1);
namespace {template <typename T> inline void read(T &x) {x = 0; T f = 1;char s = getchar();for(; !isdigit(s); s = getchar()) if(s == '-') f = -1;for(;  isdigit(s); s = getchar()) x = (x << 3) + (x << 1) + (s ^ 48);x *= f;}
}
#define fio ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);
#define _for(n,m,i) for (register int i = (n); i <  (m); ++i)
#define _rep(n,m,i) for (register int i = (n); i <= (m); ++i)
#define _srep(n,m,i)for (register int i = (n); i >= (m); i--)
#define _sfor(n,m,i)for (register int i = (n); i >  (m); i--)
#define lson rt << 1, l, mid
#define rson rt << 1 | 1, mid + 1, r
#define lowbit(x) x & (-x)
#define pii pair<int,int>
#define fi first
#define se second
const int N = 5e5+5;
struct fhq_Treap{struct { int val, siz, l, r, rnd;}T[N*60]; int cnt, x, y, z;void up(int rt) {T[rt].siz = 1 + T[T[rt].l].siz + T[T[rt].r].siz;}int new_node(int x) {T[++cnt].val = x;T[cnt].rnd = rand();T[cnt].siz = 1;return cnt;}void split(int rt, int k, int &x, int &y) {if(!rt) return x = y = 0, void(0);if(T[rt].val <= k) {x = ++cnt; T[x] = T[rt];split(T[x].r, k, T[x].r, y);up(x);} else { y = ++cnt; T[y] = T[rt];split(T[y].l, k, x, T[y].l);up(y);} } int merge(int x, int y) {if(!x || !y) return x^y;if(T[x].rnd < T[y].rnd) {T[x].r = merge(T[x].r, y);up(x); return x;} T[y].l = merge(x, T[y].l);up(y); return y;}void insert(int &rt, int val) {split(rt, val-1, x, y);rt = merge(merge(x, new_node(val)), y);}void del(int &rt, int val) {split(rt, val-1, x, y);split(y, val, z, y);z = merge(T[z].l, T[z].r);rt = merge(merge(x, z), y);}int _rank(int rt, int val) {int ans = 0;while(rt) {if(val < T[rt].val) rt = T[rt].l;else if(val == T[rt].val) {while(T[T[rt].l].val == val) cout << T[rt].val << endl,  rt = T[rt].l;return ans + T[T[rt].l].siz;}else ans += T[T[rt].l].siz + 1, rt = T[rt].r;}return ans;}int _kth(int rt, int k) {while(rt) {if(T[T[rt].l].siz >= k) rt = T[rt].l;else if (T[T[rt].l].siz + 1 == k) return T[rt].val;else k -= T[T[rt].l].siz + 1, rt = T[rt].r;}return INF;}int pre(int rt, int val) {int ans = -INF;while(rt) {if(val == T[rt].val) {if(T[rt].l) {rt = T[rt].l;while(T[rt].r) rt = T[rt].r;ans = T[rt].val;} break;}if(T[rt].val < val && ans < T[rt].val) ans = T[rt].val;rt = val < T[rt].val ? T[rt].l : T[rt].r;}return ans;}  int nxt(int rt, int val) {int ans = INF;while(rt) {if(val == T[rt].val) {if(T[rt].r) {rt = T[rt].r;while(T[rt].l) rt = T[rt].l;ans = T[rt].val;} break;}if(T[rt].val > val && ans > T[rt].val) ans = T[rt].val;rt = val > T[rt].val ? T[rt].r : T[rt].l;}return ans;}
}Tr;
int root[N];
int main() {int n, vi, op, xi; read(n);Tr.insert(root[0], -INF); Tr.insert(root[0], INF);for(int i = 1; i <= n; i++) {read(vi); read(op); read(xi);root[i] = root[vi];switch(op) { case 1:Tr.insert(root[i], xi);break;case 2:Tr.del(root[i], xi);break;case 3:printf("%d\n", Tr._rank(root[i], xi));break;case 4:printf("%d\n", Tr._kth(root[i], xi+1));break;case 5:printf("%d\n", Tr.pre(root[i], xi));break;case 6:printf("%d\n", Tr.nxt(root[i], xi));break;}}
}

书架

P2596 [ZJOI2006]书架

#include<bits/stdc++.h>
using namespace std;
typedef long long LL;
const int INF = 0x3f3f3f3f;
const double Pi = acos(-1);
namespace {template <typename T> inline void read(T &x) {x = 0; T f = 1;char s = getchar();for(; !isdigit(s); s = getchar()) if(s == '-') f = -1;for(;  isdigit(s); s = getchar()) x = (x << 3) + (x << 1) + (s ^ 48);x *= f;}
}
#define fio ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);
#define _for(n,m,i) for (register int i = (n); i <  (m); ++i)
#define _rep(n,m,i) for (register int i = (n); i <= (m); ++i)
#define _srep(n,m,i)for (register int i = (n); i >= (m); i--)
#define _sfor(n,m,i)for (register int i = (n); i >  (m); i--)
#define lson rt << 1, l, mid
#define rson rt << 1 | 1, mid + 1, r
#define lowbit(x) x & (-x)
#define pii pair<int,int>
#define fi first
#define se second
const int N = 4e5+5;
int siz[N], ch[N][2], val[N], rnd[N], root;
int new_node(int pos, int va) { val[va] = pos;rnd[va] = rand();siz[va] = 1;return va;
}
void up(int rt) { siz[rt] = 1 + siz[ch[rt][0]] + siz[ch[rt][1]];
}
void split(int rt, int k, int &x, int &y) { if(!rt) return x = y = 0, void(0);if(val[rt] <= k) x = rt, split(ch[rt][1], k, ch[x][1], y);else y = rt, split(ch[rt][0], k, x, ch[rt][0]);up(rt);
}
int merge(int x, int y) { if(!x || !y) return x + y;if(rnd[x] < rnd[y]) { ch[x][1] = merge(ch[x][1], y);up(x);return x; } ch[y][0] = merge(x, ch[y][0]);up(y); return y;
}
char s[10];
int x, y, z, Min, Max;
void insert(int pos, int va) { root = merge(root, new_node(pos, va));
}
void upd(int pos, int va) {split(root, val[pos], x, y);split(x, val[pos]-1, x, z);if(va) val[pos] = --Min, root = merge(merge(z, x), y);else val[pos] = ++Max, root = merge(merge(x, y), z);
}
int _rank(int k) { split(root, val[k]-1, x, y);int ans = siz[x];root = merge(x, y);return ans;
}
int _kth(int rt, int k) { while(rt) { // cout << k << " " << siz[rt] << " " << siz[ch[rt][0]]<< " " << siz[ch[rt][1]] << endl;if(siz[ch[rt][0]] >= k) rt = ch[rt][0];else if(siz[ch[rt][0]] + 1 == k ) return rt;else k -= siz[ch[rt][0]] + 1, rt = ch[rt][1];}
}
void reve(int pos, int t) { if(!t) return ;if(t<0) { // 和前驱交换 split(root, val[pos]-1, x, y);t = _kth(x, siz[x]);split(x, val[t]-1, x, t);split(y, val[pos], pos, y);swap(val[t], val[pos]);root = merge(merge(x, pos), merge(t, y));} else { // 和后继交换 split(root, val[pos], x, y);t = _kth(y, 1);split(y, val[t], t, y);split(x, val[pos]-1, x, pos);swap(val[t], val[pos]);root = merge(merge(x, t), merge(pos, y));}
}
int main() {  srand(time(0));int n, m, k, t; read(n); read(m); Min = 1, Max = n;for(int i = 1; i <= n; i++) { read(k);insert(i, k);} while(m--) { scanf("%s %d", s, &k);if(s[0] == 'T') {upd(k, 1);} else if(s[0] == 'B') { upd(k, 0);} else if(s[0] == 'I') { read(t);reve(k, t);} else if(s[0] == 'A') { printf("%d\n", _rank(k));} else { printf("%d\n", _kth(root, k)); } }
}

P3850 [TJOI2007]书架

书架

#include<bits/stdc++.h>
using namespace std;
typedef long long LL;
const int INF = 0x3f3f3f3f;
const double Pi = acos(-1);
namespace {template <typename T> inline void read(T &x) {x = 0; T f = 1;char s = getchar();for(; !isdigit(s); s = getchar()) if(s == '-') f = -1;for(;  isdigit(s); s = getchar()) x = (x << 3) + (x << 1) + (s ^ 48);x *= f;}
}
#define fio ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);
#define _for(n,m,i) for (register int i = (n); i <  (m); ++i)
#define _rep(n,m,i) for (register int i = (n); i <= (m); ++i)
#define _srep(n,m,i)for (register int i = (n); i >= (m); i--)
#define _sfor(n,m,i)for (register int i = (n); i >  (m); i--)
#define lson rt << 1, l, mid
#define rson rt << 1 | 1, mid + 1, r
#define lowbit(x) x & (-x)
#define pii pair<int,int>
#define fi first
#define se second
const int N = 2e5+205;
char s[N][11];
int val[N], ch[N][2], rnd[N], siz[N], cnt, tot, root;
int new_node(int x) {val[++cnt] = x;siz[cnt] = 1;rnd[cnt] = rand();return cnt;
}
void up(int rt) {siz[rt] = 1 + siz[ch[rt][0]] + siz[ch[rt][1]];
}
void split(int rt, int k, int &x, int &y) {if(!rt) return x = y = 0, void (0);if(siz[ch[rt][0]] < k) x = rt, split(ch[x][1], k-siz[ch[rt][0]]-1, ch[x][1], y);else y = rt, split(ch[rt][0], k, x, ch[y][0]);up(rt);
}
int merge(int x, int y) {if(!x || !y) return x + y;if(rnd[x] < rnd[y]) {ch[x][1] = merge(ch[x][1], y);up(x); return x;} ch[y][0] = merge(x, ch[y][0]);up(y); return y;
}
int r1, r2, r3;
void insert(int pos, int va) {split(root, pos, r1, r2);root = merge(merge(r1, new_node(va)), r2);
}
void qry(int pos) {split(root, pos, r1, r2);split(r2, 1, r2, r3);printf("%s\n", s[val[r2]]);root = merge(merge(r1, r2), r3);
}
int main() {srand(time(0));int n, q; read(n);_rep(1, n, i) {scanf("%s", s[++tot]);insert(i-1, tot);}read(n);_rep(1, n, i) {scanf("%s %d", s[++tot], &q);insert(q, tot);}read(n);while(n--) {read(q);qry(q);}
}

fhq-Treap题目记录相关推荐

  1. FHQ Treap学习记录(详解)

    前言:嘻嘻,本蒟蒻的第一篇文章!由于本蒟蒻第一次写博客,本文章质量可能不是很好QAQ 前置芝士(了解即可啦~):C++.BST 二叉搜索树.堆.二叉堆 如果您不想听蒟蒻胡扯 Treap,可以直接根据目 ...

  2. FHQ Treap 详解

    0. 简单介绍 FHQ Treap,以下简写为fhq,是一种treap(树堆)的变体,功能比treap强大,代码比splay好写,易于理解,常数稍大. fhq不需要通过一般平衡树的左右旋转来保持平衡, ...

  3. P2596 [ZJOI2006]书架(fhq treap)

    P2596 [ZJOI2006]书架 我们用fhq treap来完成这一题 对于一个新插入的节点我们取权值为其索引值,其所记录的valuevaluevalue是其当前索引所在位置. 操作一:把索引为v ...

  4. FHQ Treap 总结

    [前言(一堆废话)] 目前 OI 竞赛中两大主流平衡树之一就是 FHQ Treap(另一个是 Splay). 普通 BST 的中序遍历中,val 值构成一个单调递增的序列. Treap 在 BST 的 ...

  5. 平衡树学习笔记之 fhq Treap

    平衡树学习笔记 1:fhq Treap(非旋 Treap) 正文开始前首先 %%% fhq 大佬. 众所周知,平衡树是一种 非常猥琐 码量堪忧的数据结构. 他的祖先是一种叫做二叉搜索树 ( B S T ...

  6. 【模板】FHQ Treap

    FHQ Treap 无旋Treap 维护的信息 c h [ i ] [ 0 / 1 ] ch[i][0/1] ch[i][0/1] v a l [ i ] val[i] val[i] f i x [ ...

  7. FHQ Treap【基于P3369的讲解】【随机数、各数组、函数运用】

    该模板题的题目链接 很多人看到了FHQ Treap都不知道它是干什么用的,今天也是刚学的FHQ Treap,学了一整天了,终于过掉了洛谷的P3369了,也算是对这个算法有了些自己的了解,还是错的太多次 ...

  8. 并不对劲的fhq treap

    听说很对劲的太刀流不止会splay一种平衡树,并不对劲的片手流为了反驳他,并与之针锋相对,决定学学高端操作. 很对劲的太刀流-> 据说splay常数极大,但是由于只知道splay一种平衡树能对序 ...

  9. FHQ Treap及其可持久化与朝鲜树式重构

    FHQ Treap,又称无旋treap,一种不基于旋转机制的平衡树,可支持所有有旋treap.splay等能支持的操作(只有在LCT中会比splay复杂度多一个log).最重要的是,它是OI中唯一一种 ...

  10. JavaScript预解析、作用域题目记录

    JavaScript预解析.作用域题目记录 写出以下题目执行的结果及过程分析 function fun ( n ) {console.log( n );var n = 456;console.log( ...

最新文章

  1. vim的简单介绍与使用
  2. java实现layui分页,MVC下实现LayUI分页的Demo
  3. Linux安全管理-Iptables-NAT技术应用
  4. workerman mmo_2020了,我们为什么还在做MMO端游
  5. Kruskal重构树
  6. ArcGIS API for JavaScript 4.0(一)
  7. NOIP2008 普及组T4 立体图 解题报告-S.B.S.(施工未完成)
  8. axios传数组到后台_我是如何让公司后台管理系统焕然一新的
  9. 无浮动IP的虚机出公网流量路径
  10. 美轮美奂渐变炫彩海报素材,荣盛回来!
  11. Linux开机启动过程(10):start_kernel 初始化(至setup_arch初期)
  12. matlab输出复数值到.txt文件中
  13. 【PyTorch深度学习项目实战100例】—— 基于ResNet101实现猴痘病毒识别任务 | 第31例
  14. GB28181国标错误码
  15. 企业内的ITSM软件与OA系统有什么区别和关系?
  16. 无线网和网吧服务器,网吧网络使用无线局域网的几个优势所在
  17. 带云的计算机词语,带云字的词语和成语有哪些
  18. 彻底搞懂AQS-重点方法精讲 [并发劝退- 哭唧唧]
  19. 云端服务器(linux版)部署mysql
  20. No converter for [class XXX] with preset Content-Type ‘null‘

热门文章

  1. 国内首部区块链行业纪录片开播
  2. 机器学习算法优缺点_用于机器学习的优化算法的优缺点
  3. 75岁老人用excel表格画画,令人叹服!
  4. 晨读一年的复盘会议_一年后,在家中远程办公,网真和视频会议
  5. linux shell编写脚本,执行命令同时操作多台主机
  6. mysql 5.0.8 下载_mysql-connector-
  7. JS笔记_P72数组的四个主要方法
  8. php excel下载打不开了,php下载excel无法打开的解决方法_PHP教程
  9. android AP热点(wifi热点)开发
  10. C语言:va_list