模板(不定时更新)

My blog
注意:不定时更新

火车头
#pragma GCC optimize(3) #pragma GCC target("avx") #pragma GCC optimize("Ofast") #pragma GCC optimize("inline") #pragma GCC optimize("-fgcse") #pragma GCC optimize("-fgcse-lm") #pragma GCC optimize("-fipa-sra") #pragma GCC optimize("-ftree-pre") #pragma GCC optimize("-ftree-vrp") #pragma GCC optimize("-fpeephole2") #pragma GCC optimize("-ffast-math") #pragma GCC optimize("-fsched-spec") #pragma GCC optimize("unroll-loops") #pragma GCC optimize("-falign-jumps") #pragma GCC optimize("-falign-loops") #pragma GCC optimize("-falign-labels") #pragma GCC optimize("-fdevirtualize") #pragma GCC optimize("-fcaller-saves") #pragma GCC optimize("-fcrossjumping") #pragma GCC optimize("-fthread-jumps") #pragma GCC optimize("-funroll-loops") #pragma GCC optimize("-fwhole-program") #pragma GCC optimize("-freorder-blocks") #pragma GCC optimize("-fschedule-insns") #pragma GCC optimize("inline-functions") #pragma GCC optimize("-ftree-tail-merge") #pragma GCC optimize("-fschedule-insns2") #pragma GCC optimize("-fstrict-aliasing") #pragma GCC optimize("-fstrict-overflow") #pragma GCC optimize("-falign-functions") #pragma GCC optimize("-fcse-skip-blocks") #pragma GCC optimize("-fcse-follow-jumps") #pragma GCC optimize("-fsched-interblock") #pragma GCC optimize("-fpartial-inlining") #pragma GCC optimize("no-stack-protector") #pragma GCC optimize("-freorder-functions") #pragma GCC optimize("-findirect-inlining") #pragma GCC optimize("-fhoist-adjacent-loads") #pragma GCC optimize("-frerun-cse-after-loop") #pragma GCC optimize("inline-small-functions") #pragma GCC optimize("-finline-small-functions") #pragma GCC optimize("-ftree-switch-conversion") #pragma GCC optimize("-foptimize-sibling-calls") #pragma GCC optimize("-fexpensive-optimizations") #pragma GCC optimize("-funsafe-loop-optimizations") #pragma GCC optimize("inline-functions-called-once") #pragma GCC optimize("-fdelete-null-pointer-checks") #pragma GCC optimize(2)
缺省源
Dev-C++
#include<bits/stdc++.h> #define ll long long #define PII pair<int, int> #define Kg putchar(' ') #define Ed putchar('\n') //bool __begin__; using namespace std; const ll N = , inf = 1e9, INF = 1e18; template<class T> inline void read(T &x){x = 0;int f = 1;char ch = getchar();for(; ch < '0' || ch > '9'; f = ((ch == '-') ? -1 : f), ch = getchar());for(; ch >= '0' && ch <= '9'; x = (x << 1) + (x << 3) + (ch ^ 48), ch = getchar());x *= f;} template<class T> inline void print(T x){if(x < 0){putchar('-'), print(-x);}else if(x < 10){putchar(x ^ 48);}else{print(x / 10), putchar((x % 10) ^ 48);}} //bool __end__; signed main(){ // print((int)(&__begin__ - &__end__) >> 20), puts("MB"); // freopen(".in", "r", stdin); // freopen(".out", "w", stdout); return 0; }
VS code
#include<bits/stdc++.h> // #define int long long #define ll long long #define PII pair<int, int> #define Kg putchar(' ') #define Ed putchar('\n') // bool __begin__; using namespace std; const ll N = , inf = 1e9, INF = 1e18; template<class T> inline void read(T &x){x = 0;int f = 1;char ch = getchar();for(; ch < '0' || ch > '9'; f = ((ch == '-') ? -1 : f), ch = getchar());for(; ch >= '0' && ch <= '9'; x = (x << 1) + (x << 3) + (ch ^ 48), ch = getchar());x *= f;} template<class T> inline void print(T x){if(x < 0){putchar('-'), print(-x);}else if(x < 10){putchar(x ^ 48);}else{print(x / 10), putchar((x % 10) ^ 48);}} // bool __end__; signed main(){ // print((int)(&__begin__ - &__end__) >> 20), puts("MB"); // freopen(".in", "r", stdin); // freopen(".out", "w", stdout); return 0; }
{ "#include": { "prefix": "#include", "body": [ "#include<bits/stdc++.h>", "// #define int long long", "#define ll long long", "#define PII pair<int, int>", "#define Kg putchar(' ')", "#define Ed putchar('\\n')", "// bool __begin__;", "using namespace std;", "const ll N = , inf = 1e9, INF = 1e18;", "template<class T> inline void read(T &x){x = 0;int f = 1;char ch = getchar();for(; ch < '0' || ch > '9'; f = ((ch == '-') ? -1 : f), ch = getchar());for(; ch >= '0' && ch <= '9'; x = (x << 1) + (x << 3) + (ch ^ 48), ch = getchar());x *= f;}", "template<class T> inline void print(T x){if(x < 0){putchar('-'), print(-x);}else if(x < 10){putchar(x ^ 48);}else{print(x / 10), putchar((x % 10) ^ 48);}}", "// bool __end__;", "signed main(){", " // print((int)(&__begin__ - &__end__) >> 20), puts(\"MB\");", " // freopen(\".in\", \"r\", stdin);", " // freopen(\".out\", \"w\", stdout);", " $1", " return 0;", "}" ] }, "Graph": { "prefix": "Graph", "body": [ "struct Graph{", " int hd[N], cnt;", " struct edge{int nt, to, w;}e[N * 2];", " Graph(){}", " void clear(int n = 0){for(int i = 1; i <= n; i++){hd[i] = 0;}for(int i = 1; i <= cnt; i++){hd[e[i].to] = 0, e[i] = {0, 0, 0};}cnt = 0;}", " void add(int x, int y, int z = 0){e[++cnt] = {hd[x], y, z}, hd[x] = cnt;}", " #define Son(G, u) for(int ik = G.hd[u], v = G.e[ik].to, w = G.e[ik].w; ik; ik = G.e[ik].nt, v = G.e[ik].to, w = G.e[ik].w)", "}G;" ] }, "ksm": { "prefix": "ksm", "body": [ "int ksm(int a, int b, int p){int ans = 1;a %= p;while(b){if(b & 1){(ans *= a) %= p;}(a *= a) %= p;b >>= 1;}return ans % p;}" ] }, "BIT": { "prefix": "BIT", "body": [ "struct BIT{", " int sum[N];", " void add(int x, int y){", " for(int i = x; i <= n; i += i & -i)", " sum[i] += y;", " }", " int ask(int x){", " int ans = 0;", " for(int i = x; i >= 1; i -= i & -i)", " ans += sum[i];", " return ans;", " }", "}B;" ] }, "STree": { "prefix": "STree", "body": [ "struct STree{", " $1", " #define Mid ((l + r) >> 1)", " #define Ls (rt << 1)", " #define Rs (rt << 1 | 1)", " #define Lson Ls, l, Mid", " #define Rson Rs, Mid + 1, r", " #define Root ", " ", "}S;" ] }, "LCA": { "prefix": "LCA", "body": [ "int fa[N][22], dep[N];", "void dfs(int u, int F){", " for(int i = 1; i <= 20; i++) fa[u][i] = fa[fa[u][i - 1]][i - 1];", " Son(G, u){", " if(v == F) continue;", " fa[v][0] = u, dep[v] = dep[u] + 1;", " dfs(v, u);", " }", "}", "int LCA(int x, int y){", " if(dep[x] < dep[y]) swap(x, y);", " for(int i = 20; i >= 0; i--) if(dep[fa[x][i]] >= dep[y] && fa[x][i]) x = fa[x][i];", " if(x == y) return x;", " for(int i = 20; i >= 0; i--) if(fa[x][i] != fa[y][i] && fa[x][i] && fa[y][i]) x = fa[x][i], y = fa[y][i];", " return fa[x][0];", "}" ] }, "HCT": { "prefix": "HCT", "body": [ "#pragma GCC optimize(3)", "#pragma GCC target(\"avx\")", "#pragma GCC optimize(\"Ofast\")", "#pragma GCC optimize(\"inline\")", "#pragma GCC optimize(\"-fgcse\")", "#pragma GCC optimize(\"-fgcse-lm\")", "#pragma GCC optimize(\"-fipa-sra\")", "#pragma GCC optimize(\"-ftree-pre\")", "#pragma GCC optimize(\"-ftree-vrp\")", "#pragma GCC optimize(\"-fpeephole2\")", "#pragma GCC optimize(\"-ffast-math\")", "#pragma GCC optimize(\"-fsched-spec\")", "#pragma GCC optimize(\"unroll-loops\")", "#pragma GCC optimize(\"-falign-jumps\")", "#pragma GCC optimize(\"-falign-loops\")", "#pragma GCC optimize(\"-falign-labels\")", "#pragma GCC optimize(\"-fdevirtualize\")", "#pragma GCC optimize(\"-fcaller-saves\")", "#pragma GCC optimize(\"-fcrossjumping\")", "#pragma GCC optimize(\"-fthread-jumps\")", "#pragma GCC optimize(\"-funroll-loops\")", "#pragma GCC optimize(\"-fwhole-program\")", "#pragma GCC optimize(\"-freorder-blocks\")", "#pragma GCC optimize(\"-fschedule-insns\")", "#pragma GCC optimize(\"inline-functions\")", "#pragma GCC optimize(\"-ftree-tail-merge\")", "#pragma GCC optimize(\"-fschedule-insns2\")", "#pragma GCC optimize(\"-fstrict-aliasing\")", "#pragma GCC optimize(\"-fstrict-overflow\")", "#pragma GCC optimize(\"-falign-functions\")", "#pragma GCC optimize(\"-fcse-skip-blocks\")", "#pragma GCC optimize(\"-fcse-follow-jumps\")", "#pragma GCC optimize(\"-fsched-interblock\")", "#pragma GCC optimize(\"-fpartial-inlining\")", "#pragma GCC optimize(\"no-stack-protector\")", "#pragma GCC optimize(\"-freorder-functions\")", "#pragma GCC optimize(\"-findirect-inlining\")", "#pragma GCC optimize(\"-fhoist-adjacent-loads\")", "#pragma GCC optimize(\"-frerun-cse-after-loop\")", "#pragma GCC optimize(\"inline-small-functions\")", "#pragma GCC optimize(\"-finline-small-functions\")", "#pragma GCC optimize(\"-ftree-switch-conversion\")", "#pragma GCC optimize(\"-foptimize-sibling-calls\")", "#pragma GCC optimize(\"-fexpensive-optimizations\")", "#pragma GCC optimize(\"-funsafe-loop-optimizations\")", "#pragma GCC optimize(\"inline-functions-called-once\")", "#pragma GCC optimize(\"-fdelete-null-pointer-checks\")", "#pragma GCC optimize(2)" ] }, "gjd": { "prefix": "gjd", "body": [ "struct gjd{int n, a[N];};", "gjd read(){", " scanf(\"%s\", s + 1);", " int len = strlen(s + 1);", " gjd c = {len, {0}};", " for(int i = len; i >= 1; i--) c.a[len - i + 1] = s[i] - '0';", " return c;", "}", "void pr(gjd a){for(int i = a.n; i >= 1; i--) print(a.a[i]);}", "gjd operator+(gjd a, gjd b){", " gjd c = {max(a.n, b.n), {0}};", " for(int i = 1; i <= c.n; i++){", " c.a[i] += a.a[i] + b.a[i];", " c.a[i + 1] += c.a[i] / 10;", " c.a[i] %= 10;", " }", " while(c.a[c.n + 1]){", " c.n++;", " c.a[c.n + 1] += c.a[c.n] / 10;", " c.a[c.n] %= 10;", " }", " return c;", "}", "gjd operator-(gjd a, gjd b){", " gjd c = {max(a.n, b.n), {0}};", " for(int i = 1; i <= c.n; i++){", " c.a[i] += a.a[i] - b.a[i];", " if(c.a[i] < 0) c.a[i] += 10, c.a[i + 1]--;", " }while(c.n >= 2 && !c.a[c.n]) c.n--;", " return c;", "}", "gjd operator*(gjd a, int b){", " gjd c = {a.n, {0}};", " for(int i = 1; i <= c.n; i++){", " c.a[i] += a.a[i] * b;", " c.a[i + 1] += c.a[i] / 10;", " c.a[i] %= 10;", " }", " while(c.a[c.n + 1]){", " c.n++;", " c.a[c.n + 1] += c.a[c.n] / 10;", " c.a[c.n] %= 10;", " }", " return c;", "}" ] }, "LCree": { "prefix": "LCree", "body": [ "int get(int i, int s){}", "struct LCree{", " int sum[N * 4];", " #define Mid ((l + r) >> 1)", " #define Ls (rt << 1)", " #define Rs (rt << 1 | 1)", " #define Lson Ls, l, Mid", " #define Rson Rs, Mid + 1, r", " #define Root 1, k * 2, n", " void clear(){memset(sum, 0, sizeof(sum));}", " void update(int rt, int l, int r, int x){", " if(get(x, Mid) < get(sum[rt], Mid)) swap(x, sum[rt]);", " if(get(x, l) < get(sum[rt], l)) update(Lson, x);", " if(get(x, r) < get(sum[rt], r)) update(Rson, x);", " }", " int ask(int rt, int l, int r, int x){", " if(l == r) return get(sum[rt], x);", " if(x <= Mid) return min(ask(Lson, x), get(sum[rt], x));", " else return min(ask(Rson, x), get(sum[rt], x));", " }", "}L;" ] }, "mat": { "prefix": "mat", "body": [ "struct mat{int n, m, a[N][N];};", "void read(mat &a){", " a.n = a.m = 0;", " read(a.n), read(a.m);", " for(int i = 1; i <= a.n; i++)", " for(int j = 1; j <= a.m; j++)", " read(a.a[i][j]);", "}", "void print(const mat a){", " for(int i = 1; i <= a.n; i++){", " for(int j = 1; j <= a.m; j++){", " print(a.a[i][j]), Kg;", " }Ed;", " }", "}", "mat operator*(mat a, mat b){", " mat c;", " c.n = a.n, c.m = b.m;", " for(int i = 1; i <= c.n; i++){", " for(int j = 1; j <= c.m; j++){", " c.a[i][j] = 0;", " for(int k = 1; k <= a.m; k++){", " (c.a[i][j] += (p + a.a[i][k] * b.a[k][j] % p) % p) %= p;", " }", " }", " }", " return c;", "}", "mat ksm(mat a, int b){", " mat ans;", " ans.n = a.n, ans.m = a.m;", " for(int i = 1; i <= ans.n; i++)", " for(int j = 1; j <= ans.m; j++)", " ans.a[i][j] = (i == j);", " while(b > 0){", " if(b & 1) ans = ans * a;", " a = a * a;", " b >>= 1;", " }return ans;", "}" ] }, "C": { "prefix": "C", "body": [ "int t = 1e6, jc[N], inv[N];", "int C(int n, int m){", " if(m > n) return 0;", " return jc[n] * inv[n - m] % p * inv[m] % p;", "}", "void init(){", " jc[0] = 1;", " for(int i = 1; i <= t; i++) jc[i] = (jc[i - 1] * i) % p;", " inv[t] = ksm(jc[t], p - 2, p);", " for(int i = t - 1; i >= 0; i--) inv[i] = inv[i + 1] * (i + 1) % p;", "}" ] }, "lucas": { "prefix": "lucas", "body": [ "int lucas(int n, int m){", " if(n < p && m < p) return C(n, m);", " return lucas(n / p, m / p) * C(n % p, m % p) % p;", "}" ] }, }
AT
#include<bits/stdc++.h> #define int long long #define ll long long #define PII pair<int, int> #define Kg putchar(' ') #define Ed putchar('\n') using namespace std; const ll N = 2e6 + 10, M = 5e3 + 10, inf = 1e9, INF = 1e18; template<class T> inline void read(T &x){x = 0;int f = 1;char ch = getchar();for(; ch < '0' || ch > '9'; f = ((ch == '-') ? -1 : f), ch = getchar());for(; ch >= '0' && ch <= '9'; x = (x << 1) + (x << 3) + (ch ^ 48), ch = getchar());x *= f;} template<class T> inline void print(T x){if(x < 0){putchar('-'), print(-x);}else if(x < 10){putchar(x ^ 48);}else{print(x / 10), putchar((x % 10) ^ 48);}} int n, m; char s[N], t[N]; signed main(){ return 0; }
#include<bits/stdc++.h> #define int long long #define ll long long #define PII pair<int, int> #define Kg putchar(' ') #define Ed putchar('\n') using namespace std; const ll N = 2e6 + 10, M = 5e3 + 10, inf = 1e9, INF = 1e18; template<class T> inline void read(T &x){x = 0;int f = 1;char ch = getchar();for(; ch < '0' || ch > '9'; f = ((ch == '-') ? -1 : f), ch = getchar());for(; ch >= '0' && ch <= '9'; x = (x << 1) + (x << 3) + (ch ^ 48), ch = getchar());x *= f;} template<class T> inline void print(T x){if(x < 0){putchar('-'), print(-x);}else if(x < 10){putchar(x ^ 48);}else{print(x / 10), putchar((x % 10) ^ 48);}} signed main(){ return 0; }

1|0Part 1 图论

建图
struct Graph{ int hd[N], cnt; struct edge{int nt, to, w;}e[N * 2]; Graph(){} void clear(int n = 0){for(int i = 1; i <= n; i++){hd[i] = 0;}for(int i = 1; i <= cnt; i++){hd[e[i].to] = 0, e[i] = {0, 0, 0};}cnt = 0;} void add(int x, int y, int z = 0){e[++cnt] = {hd[x], y, z}, hd[x] = cnt;} #define Son(G, u) for(int ik = G.hd[u], v = G.e[ik].to, w = G.e[ik].w; ik; ik = G.e[ik].nt, v = G.e[ik].to, w = G.e[ik].w) }G;
倍增LCA
int fa[N][22], dep[N]; void dfs(int u, int F){ for(int i = 1; i <= 20; i++) fa[u][i] = fa[fa[u][i - 1]][i - 1]; Son(G, u){ if(v == F) continue; fa[v][0] = u, dep[v] = dep[u] + 1; dfs(v, u); } } int LCA(int x, int y){ if(dep[x] < dep[y]) swap(x, y); for(int i = 20; i >= 0; i--) if(dep[fa[x][i]] >= dep[y] && fa[x][i]) x = fa[x][i]; if(x == y) return x; for(int i = 20; i >= 0; i--) if(fa[x][i] != fa[y][i] && fa[x][i] && fa[y][i]) x = fa[x][i], y = fa[y][i]; return fa[x][0]; }
Tarjan

边双

2|0Part 2 数学

快速幂
int ksm(int a, int b, int p){int ans = 1;a %= p;while(b){if(b & 1){(ans *= a) %= p;}(a *= a) %= p;b >>= 1;}return ans % p;}
ll ksm(ll a, ll b, ll p){ll ans = 1;a %= p;while(b){if(b & 1){(ans *= a) %= p;}(a *= a) %= p;b >>= 1;}return ans % p;}
int ksm(int a, int b, int p){ int ans = 1; a %= p; while(b){ if(b & 1){ (ans *= a) %= p; } (a *= a) %= p; b >>= 1; } return ans % p; }
矩阵快速幂
struct mat{int n, m, a[N][N];}; void read(mat &a){ a.n = a.m = 0; read(a.n), read(a.m); for(int i = 1; i <= a.n; i++) for(int j = 1; j <= a.m; j++) read(a.a[i][j]); } void print(const mat a){ for(int i = 1; i <= a.n; i++){ for(int j = 1; j <= a.m; j++){ print(a.a[i][j]), Kg; }Ed; } } mat operator*(mat a, mat b){ mat c; c.n = a.n, c.m = b.m; for(int i = 1; i <= c.n; i++){ for(int j = 1; j <= c.m; j++){ c.a[i][j] = 0; for(int k = 1; k <= a.m; k++){ (c.a[i][j] += (p + a.a[i][k] * b.a[k][j] % p) % p) %= p; } } } return c; } mat ksm(mat a, int b){ mat ans; ans.n = a.n, ans.m = a.m; for(int i = 1; i <= ans.n; i++) for(int j = 1; j <= ans.m; j++) ans.a[i][j] = (i == j); while(b > 0){ if(b & 1) ans = ans * a; a = a * a; b >>= 1; }return ans; }
求组合数
int t = 1e6, jc[N], inv[N]; int C(int n, int m){ if(m > n) return 0; return jc[n] * inv[n - m] % p * inv[m] % p; } void init(){ jc[0] = 1; for(int i = 1; i <= t; i++) jc[i] = (jc[i - 1] * i) % p; inv[t] = ksm(jc[t], p - 2, p); for(int i = t - 1; i >= 0; i--) inv[i] = inv[i + 1] * (i + 1) % p; }
int lucas(int n, int m){ if(n < p && m < p) return C(n, m); return lucas(n / p, m / p) * C(n % p, m % p) % p; }
高精度运算
struct gjd{int n, a[N];}; gjd read(){ scanf("%s", s + 1); int len = strlen(s + 1); gjd c = {len, {0}}; for(int i = len; i >= 1; i--) c.a[len - i + 1] = s[i] - '0'; return c; } void pr(gjd a){for(int i = a.n; i >= 1; i--) print(a.a[i]);} gjd operator+(gjd a, gjd b){ gjd c = {max(a.n, b.n), {0}}; for(int i = 1; i <= c.n; i++){ c.a[i] += a.a[i] + b.a[i]; c.a[i + 1] += c.a[i] / 10; c.a[i] %= 10; } while(c.a[c.n + 1]){ c.n++; c.a[c.n + 1] += c.a[c.n] / 10; c.a[c.n] %= 10; } return c; } gjd operator-(gjd a, gjd b){ gjd c = {max(a.n, b.n), {0}}; for(int i = 1; i <= c.n; i++){ c.a[i] += a.a[i] - b.a[i]; if(c.a[i] < 0) c.a[i] += 10, c.a[i + 1]--; }while(c.n >= 2 && !c.a[c.n]) c.n--; return c; } gjd operator*(gjd a, int b){ gjd c = {a.n, {0}}; for(int i = 1; i <= c.n; i++){ c.a[i] += a.a[i] * b; c.a[i + 1] += c.a[i] / 10; c.a[i] %= 10; } while(c.a[c.n + 1]){ c.n++; c.a[c.n + 1] += c.a[c.n] / 10; c.a[c.n] %= 10; } return c; }

3|0Part 3 数据结构

树状数组
struct BIT{ int sum[N]; void add(int x, int y){ for(int i = x; i <= n; i += i & -i) sum[i] += y; } int ask(int x){ int ans = 0; for(int i = x; i >= 1; i -= i & -i) ans += sum[i]; return ans; } }B;
单调队列
struct ddque{ int q[N], hd, tl; void clear(){hd = 1, tl = 0;} bool empty(){return (hd <= tl);} int front(){return q[hd];} int back(){return q[tl];} void push_back(int x){q[++tl] = x;} void pop_front(){hd++;} void pop_back(){tl--;} }q;
Treap
int root; struct Treap{ int sum[N], sk[N], tot[N], siz[N]; int L[N], R[N], cnt; void build(){ cnt = 2; sum[1] = -inf, sum[2] = inf; sk[1] = rand(), sk[2] = rand(); tot[1] = tot[2] = 1; siz[1] = 2, siz[2] = 1; R[1] = 2; root = 1; } void push_up(int rt){siz[rt] = siz[L[rt]] + siz[R[rt]] + tot[rt];} void yx(int &rt){ int p = L[rt]; L[rt] = R[p], R[p] = rt; push_up(rt), push_up(p); rt = p; } void zx(int &rt){ int p = R[rt]; R[rt] = L[p], L[p] = rt; push_up(rt), push_up(p); rt = p; } void add(int &rt, int x){ if(!rt){ rt = ++cnt; sum[rt] = x, sk[rt] = rand(); tot[rt] = siz[rt] = 1; return; } if(x == sum[rt]){ tot[rt]++; push_up(rt); return; } else if(x < sum[rt]){ add(L[rt], x); push_up(rt); if(sk[L[rt]] < sk[rt]) yx(rt); } else{ add(R[rt], x); push_up(rt); if(sk[R[rt]] < sk[rt]) zx(rt); } } void del(int &rt, int x){ if(!rt) return; if(x == sum[rt]){ if(tot[rt] > 1){ tot[rt]--; push_up(rt); return; } if(L[rt] || R[rt]){ if(!R[rt] || sk[L[rt]] > sk[R[rt]]) yx(rt), del(R[rt], x); else zx(rt), del(L[rt], x); push_up(rt); } else rt = 0; return; } else if(x < sum[rt]) del(L[rt], x); else del(R[rt], x); push_up(rt); } int ask_rk(int rt, int x){ if(!rt) return 0; if(x == sum[rt]) return siz[L[rt]]; else if(x < sum[rt]) return ask_rk(L[rt], x); else return siz[L[rt]] + tot[rt] + ask_rk(R[rt], x); } int ask_val(int rt, int k){ if(!rt) return inf; if(siz[L[rt]] >= k) return ask_val(L[rt], k); else if(siz[L[rt]] + tot[rt] >= k) return sum[rt]; else return ask_val(R[rt], k - siz[L[rt]] - tot[rt]); } int ask_pre(int rt, int x){ int ans = -inf; while(rt){ if(x == sum[rt]){ if(L[rt]){ int p = L[rt]; while(R[p]) p = R[p]; ans = sum[p]; }break; } else if(x < sum[rt]) rt = L[rt]; else{ ans = max(ans, sum[rt]); rt = R[rt]; } } return ans; } int ask_nxt(int rt, int x){ int ans = inf; while(rt){ if(x == sum[rt]){ if(R[rt]){ int p = R[rt]; while(L[p]) p = L[p]; ans = sum[p]; }break; } else if(x < sum[rt]){ ans = min(ans, sum[rt]); rt = L[rt]; } else rt = R[rt]; } return ans; } }T;
李超树
int get(int i, int s){} struct LCree{ int sum[N * 4]; #define Mid ((l + r) >> 1) #define Ls (rt << 1) #define Rs (rt << 1 | 1) #define Lson Ls, l, Mid #define Rson Rs, Mid + 1, r #define Root 1, k * 2, n void clear(){memset(sum, 0, sizeof(sum));} void update(int rt, int l, int r, int x){ if(get(x, Mid) < get(sum[rt], Mid)) swap(x, sum[rt]); if(get(x, l) < get(sum[rt], l)) update(Lson, x); if(get(x, r) < get(sum[rt], r)) update(Rson, x); } int ask(int rt, int l, int r, int x){ if(l == r) return get(sum[rt], x); if(x <= Mid) return min(ask(Lson, x), get(sum[rt], x)); else return min(ask(Rson, x), get(sum[rt], x)); } }L;

4|0Part 4 其他

代码框
<details> <summary><b>Name</b></summary> </details>
赛后总结模板
## 做题历程 ### 8:00 ~ 8:40 ### 8:40 ~ 9:40 ### 9:40 ~ 10:40 ### 10:40 ~ 11:40 ### 11:40 ~ 12:00 ## 总结 ## 题解 ### A ### B ### C ### D

__EOF__

本文作者PeyNiKge
本文链接https://www.cnblogs.com/PeyNiKge/p/mo-ban.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。您的鼓励是博主的最大动力!
posted @   PeyNiKge  阅读(93)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 一文读懂知识蒸馏
· 终于写完轮子一部分:tcp代理 了,记录一下
点击右上角即可分享
微信分享提示