Processing math: 100%

模板合集

神奇的模板...总之各种各样的模板整理...已经准备用我现在的码风重新打一遍了...

 

高精度

  • 已重载运算符.没写FFT什么的...
  • FFT O(nlogn)
  • FNT O(nlogn)

  

  

优化

  • 读入优化
  • 输出优化

 

计算几何

  • qwq

  

 

图论

  • Tarjan-割点 O(m)
  • Tarjan-割边(桥) O(m)
  • Tarjan-强连通分量+缩点. O(m)
  • LCA-倍增 O(nlogn+mlogn)
  • LCA-ST表 O(nlogn+m)
  • 网络流-ISAP  O(V2E)
  • 网络流-Dinic  O(VE2)/二分图O(VE)
  • 最小生成树计数Matrix-Tree定理 O(n3)
  • 曼哈顿最小生成树 O(nlogn)

 

  • 朱刘算法/最小树形图 O(nm)

  

 

 

数学

  • 快速幂 O(logn) 快速乘 O(1)
  • φ(n) O(n)

  • 线性筛 μ O(n)
  • 矩阵乘法和矩阵快速幂 O(n3)O(n3logn)
  • 扩展欧几里得 O(logn)
  • 中国剩余定理 O(nlogn)
  • 求解模线性方程组 O(nlogn)

  

字符串

  • 后缀数组 O(nlogn)

  

 

  • Manacher O(n) 寻找最长回文串
  • 后缀自动机(SAM) O(n)

 

数据结构

  • Treap O(nlogn)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
#include <bits/stdc++.h>
using namespace std;
 
#define debug(a) cout<<(#a)<<"="<<a<<" "
#define lc(o) ch[o][0]
#define rc(o) ch[o][1]
#define uor(i,j,k) for(int i=j;i<=(int)k;i++)
#define uep(i,j,k) for(int i=j;i<(int)k;i++)
#define dor(i,j,k) for(int i=j;i>=(int)k;i--)
 
typedef long long ll;
typedef pair<int,int> pr;
typedef vector<int> vi;
typedef vector<ll> vl;
typedef vector<string> vs;
const int N = 100050;
const int M = 25;
const int oo = 0x3fffffff;
const ll  OO = 1e18;
 
const ll p = 1000000007;
ll Pow(ll a,ll b,ll r=1) { for(;b;b>>=1,a=a*a%p) if(b&1) r=r*a%p;return r; }
ll Pow(ll a,ll b,ll p,ll r=1) { for(;b;b>>=1,a=a*a%p) if(b&1) r=r*a%p;return r; }
ll inv(ll x) { return Pow(x,p-2); }
void Add(ll &x,ll y) { x=(x+y%p)%p; }
void Sub(ll &x,ll y) { x=(x-y%p+p)%p; }
void Mul(ll &x,ll y) { x=x*(y%p)%p; }
int chkmax(ll &x,ll y) { return x<y?x=y,1:0; }
int chkmin(ll &x,ll y) { return x>y?x=y,1:0; }
 
inline ll in(ll x=0,char ch=getchar(),int v=1) {
    while(ch>'9' || ch<'0') v=ch=='-'?-1:v,ch=getchar();
    while(ch>='0' && ch<='9') x=x*10+ch-'0',ch=getchar();
    return x*v;
}
/*end*/
 
namespace Treap {
    int cp,rt;
     
    int sz[N],ss[N],ch[N][2],f[N],rv[N];
    int val[N];
     
    int Newnode(int v) {
        ++cp,ss[cp]=sz[cp]=1,f[cp]=lc(cp)=rc(cp)=0,val[cp]=v,rv[cp]=rand();
        return cp;
    }
    void init() { rt=0,rv[0]=-oo; }
    void Update(int o) { sz[o]=sz[lc(o)]+sz[rc(o)]+ss[o]; }
    void Rot(int &o,int d) {
        int t=ch[o][d];ch[o][d]=ch[t][d^1],ch[t][d^1]=o,Update(o),Update(t),o=t;
    }
    void insert(int &o,int v) {
        if(!o) { o=Newnode(v);return; }
        if(val[o]==v) { ss[o]++,Update(o);return; }
        int d=v>val[o];
        insert(ch[o][d],v);
        if(rv[ch[o][d]]>rv[o]) Rot(o,d);
        else Update(o);
    }
    void earse(int &o,int v) {
        if(val[o]==v) {
            if(ss[o]>1) { ss[o]--,Update(o);return; }
            int d=rv[lc(o)]<rv[rc(o)];
            if(!ch[o][d]) { o=0;return; }
            Rot(o,d),earse(ch[o][d^1],v);
        }else earse(ch[o][v>val[o]],v);
        Update(o);
    }
    int rk(int o,int v) {
        if(val[o]<v) return sz[lc(o)]+ss[o]+rk(rc(o),v);
        else if(val[o]>v) return rk(lc(o),v);
        else return sz[lc(o)];
    }
    int kth(int o,int k) {
        if(sz[lc(o)]>=k) return kth(lc(o),k);
        else if(sz[lc(o)]+ss[o]<k) return kth(rc(o),k-sz[lc(o)]-ss[o]);
        else return val[o];
    }
    int pre(int o,int v) {
        if(!o) return -oo;
        if(val[o]>=v) return pre(lc(o),v);
        else return max(val[o],pre(rc(o),v));
    }
    int nxt(int o,int v) {
        if(!o) return oo;
        if(val[o]<=v) return nxt(rc(o),v);
        else return min(val[o],nxt(lc(o),v));
    }
    void insert(int v) { insert(rt,v); }
    void earse(int v) { earse(rt,v); }
    int rk(int v) { return rk(rt,v); }
    int kth(int k) { return kth(rt,k); }
    int pre(int v) { return pre(rt,v); }
    int nxt(int v) { return nxt(rt,v); }
};
 
int main() {
    Treap::init();
    for(int T=in();T--;) {
        int opt=in(),x=in();
        switch(opt) {
            case 1:Treap::insert(x);break;
            case 2:Treap::earse(x);break;
            case 3:printf("%d\n",Treap::rk(x)+1);break;
            case 4:printf("%d\n",Treap::kth(x));break;
            case 5:printf("%d\n",Treap::pre(x));break;
            case 6:printf("%d\n",Treap::nxt(x));break;
        }
    }
    return 0;
}

  

  • Splay O(nlogn)

  

 

posted @   北北北北屿  阅读(631)  评论(1编辑  收藏  举报
编辑推荐:
· C# 深度学习:对抗生成网络(GAN)训练头像生成模型
· .NET 适配 HarmonyOS 进展
· .NET 进程 stackoverflow异常后,还可以接收 TCP 连接请求吗?
· SQL Server统计信息更新会被阻塞或引起会话阻塞吗?
· C# 深度学习框架 TorchSharp 原生训练模型和图像识别
阅读排行:
· 这或许是全网最全的 DeepSeek 使用指南,95% 的人都不知道的使用技巧(建议收藏)
· 拒绝繁忙!免费使用 deepseek-r1:671B 参数满血模型
· 本地搭建DeepSeek和知识库 Dify做智能体Agent(推荐)
· Sdcb Chats 重磅更新:深度集成 DeepSeek-R1,思维链让 AI 更透明!
· DeepSeek-R1本地部署如何选择适合你的版本?看这里
点击右上角即可分享
微信分享提示