• 个人简介

    你是我的第 位访客

    TYOI+=i=2022mei\Huge {\rm{TYOI+=}}\sum_{i=2022}^{\infty}{me_i}

    好康的

    聪明的 GPT

    image

    数据结构蹲坑速记表

    数据结构 最大值 最小值 memset(*, 127, *); memset(*, 63, *);
    short 3276732767 32768-32768 3263932639 1619116191
    unsigned short 6553565535 00
    int 21474836472147483647 2147483648-2147483648 21390621432139062143 10611095671061109567
    unsigned int 42949672954294967295 00
    long long 92233720368547758079223372036854775807 9223372036854775808-9223372036854775808 91872019504357374719187201950435737471 45574308887988303994557430888798830399
    unsigned long long 1844674407370955161518446744073709551615 00
    float 3.40282e383.40282e38 1.17549e38-1.17549e38 3.39615e383.39615e38
    double 1.79769e3081.79769e308 2.22507e308-2.22507e308 1.38242e3061.38242e306
    long double 1.18973e49321.18973e4932 3.3621e4932-3.3621e4932 3.4826e48933.4826e4893

    我的联系方式

    微信号:CodingcowLee

    QQ 号:778217810

    邮箱:codingcow@163.com

    常用网站

    我的博客:https://codingcow.lee.mx/

    NOI 大纲:NOI 大纲(PDF)

    ChatGPT 镜像:https://chat19.aichatos.xyz/

    人教教材电子版:https://jc.pep.com.cn/

    Dev-C++:https://gitee.com/royqh1979/Dev-CPP/releases/download/v6.7.5/Dev-Cpp.6.7.5.MinGW-w64.GCC.10.3.Setup.exe

    Dev-Sidecar:https://ghproxy.com/https://github.com/docmirror/dev-sidecar/releases/download/v1.7.3/DevSidecar-1.7.3.exe

    Motrix:https://motrix.app/zh-CN/

    二次元:https://www.luogu.com.cn/paste/3gnvo2jv

    FunOI:http://8.138.87.252/

    MATLAB:https://matlab.mathworks.com/

    GeoGebra:https://geogebra.org/classic

    Evolve:https://g8hh.github.io/evolve/

    软仓:https://ruancang.net/

    AdBlocker Plus:https://adblockplus.org/download

    扫雷:http://www.minesweeper.cn/

    小恐龙:https://dinoswords.gg/

    冲浪:edge://surf (仅 edge 浏览器)

    FlorrIO:https://florr.io/

    压行机:https://mivik.gitee.io/compress

    文本对比:https://csacademy.com/app/diffing_tool/

    图论编辑器: https://csacademy.com/app/graph_editor/

    Typora:https://pan.huang1111.cn/s/58W3tl (装后在安装的文件夹中加入合适的 patch 即可)

    洛谷: https://www.luogu.com.cn/user/765847#main

    恶臭数字论证器: https://lab.magiconch.com/homo/

    CF : https://codeforces.com/profile/Coding-Cow

    GitHub: https://github.com/lixuannan

    OI-Wiki: https://oi-wiki.org || https://oi.wiki || http://oi-wiki.com

    MyFreeMP3:https://tools.liumingye.cn/music/#/

    质数验证器:https://zh.numberempire.com/primenumbers.php

    搞笑

    image

    算法模板

    线段树(有 Lazy-Tag)

    void push_up(int node) {
    	tree[node] = tree[node << 1] + tree[(node << 1) + 1];
    }
    
    void push_down(int node, int l, int r) {
    	int mid = (l + r) >> 1;
    	tag[node << 1] += tag[node];
    	tag[(node << 1) + 1] += tag[node];
    	tree[node << 1] += (mid - l + 1) * tag[node];
    	tree[(node << 1) + 1] += (r - mid) * tag[node];
    	tag[node] = 0;
    }
    
    void build(int node, int l, int r) {
    	if (l == r) {
    		tree[node] = a[l];
    		return;
    	}
    	int mid = (l + r) >> 1;
    	build(node << 1, l, mid);
    	build((node << 1) + 1, mid + 1, r);
    	push_up(node);
    }
    
    void updateRange(int node, int l, int r, int L, int R, int x) {
    	if (L <= l && R >= r) {
    		tag[node] += x;
    		tree[node] += (r - l + 1) * x;
    		return;
    	}
    	push_down(node, l, r);
    	int mid = (l + r) >> 1;
    	if (L <= mid) {
    		updateRange(node << 1, l, mid, L, R, x);
    	}
    	if (R > mid) {
    		updateRange((node << 1) + 1, mid + 1, r, L, R, x);
    	}
    	push_up(node);
    }
    
    void updateSingle(int node, int l, int r, int id, int x) {
        if (l == r) {
            tree[node] = x;
            return;
        }
        int mid = (l + r) >> 1;
        if (id <= mid) {
            updateSingle(node << 1, l, mid, id, x);
        } else {
            updateSingle((node << 1) + 1, mid + 1, r, id, x);
        }
    	push_up(node);
    }
    
    int query(int node, int l, int r, int L, int R) {
    	if (L <= l && R >= r) {
    		return tree[node];
    	}
    	push_down(node, l, r);
    	int ans = 0, mid = (l + r) >> 1;
    	if (L <= mid) {
    		ans += query(node << 1, l, mid, L, R);
    	}
    	if (R > mid) { 
    		ans += query((node << 1) + 1, mid + 1, r, L, R);
    	}
    	return ans;
    }
    

    Tarjan 强连通分量

    void tarjan(int u) {
    	dfn[u] = low[u] = ++dfncnt;
    	st.push(u);
    	ins[u] = true;
    	for (int i = 0; i < g[u].size(); i++) {
    		int v = g[u][i];
    		if (!dfn[v]) {
    			tarjan(v);
    			low[u] = min(low[u], low[v]);
    		} else {
    			if (ins[v]) {
    				low[u] = min(low[u], dfn[v]);
    			}
    		}
    	}
    	if (dfn[u] == low[u]) {
    		int v;
    		scccnt += 1;
    		do { 
    			v = st.top();
    			st.pop();
    			scc[v] = scccnt;
    			ins[v] = false;
    		} while (u != v);
    	}
    }
    

    Tarjan 求割点

    void tarjan(int u, int fa) {
    	vis[u] = true;
    	low[u] = dfn[u] = ++dfncnt;
    	int childcnt = 0;
    	for (int i = 0; i < g[u].size(); i++) {
    		if (!vis[g[u][i]]) {
    			childcnt += 1;
    			tarjan(g[u][i], u);
    			low[u] = min(low[u], low[g[u][i]]);
    			if (fa != u && low[g[u][i]] >= dfn[u] && !ans[u]) {
    				cpcnt += 1;
    				ans[u] = true;
    			}
    		} else {
    			if (g[u][i] != fa) {
    				low[u] = min(low[u], dfn[g[u][i]]);
    			}
    		}
    	}
    	if (fa == u && childcnt >= 2 && !ans[u]) {
    		cpcnt += 1;
    		ans[u] = true;
    	}
    }
    

    缩图(强连通分量)

    for (int i = 1; i <= n; i++) {
    	for (int j = 0; j < g[i].size(); j++) {
    		if (scc[g[i][j]] != scc[i]) {
    			g2[scc[i]].push_back(scc[g[i][j]]);
    		}
    	}
    }
    

    高精度模板(可用 cin & cout)

    #include <iostream>
    #include <vector>
    #include <cstring>
    #include <cassert>
    
    #define int long long
    
    using namespace std;
    
    struct BigInteger {
     
        static const int BASE = 100000000;
        static const int WIDTH = 8;
        vector<int> s;
     
        BigInteger& clean() {
    		while(!s.back()&&s.size()>1) {
    			s.pop_back();
    		} 
    		return *this;
    	}
    	
        BigInteger(int num = 0) {
    		*this = num;
    	}
    	
        BigInteger(string s) {
    		*this = s;
    	}
    	
        BigInteger& operator = (long long num) {
            s.clear();
            do {
                s.push_back(num % BASE);
                num /= BASE;
            } while (num > 0);
            return *this;
        }
        
        BigInteger& operator = (const string& str) {
            s.clear();
            int x, len = (str.length() - 1) / WIDTH + 1;
            for (int i = 0; i < len; i++) {
                int end = str.length() - i*WIDTH;
                int start = max(0ll, end - WIDTH);
                sscanf(str.substr(start, end - start).c_str(), "%lld", &x);
                s.push_back(x);
            }
            return (*this).clean();
        }
     
        BigInteger operator + (const BigInteger& b) const {
            BigInteger c; c.s.clear();
            for (int i = 0, g = 0; ; i++) {
                if (g == 0 && i >= s.size() && i >= b.s.size()) {
                	break;
    			}
                int x = g;
                if (i < s.size()) {
                	x += s[i];
    			}
                if (i < b.s.size()) {
                	x += b.s[i];
    			}
                c.s.push_back(x % BASE);
                g = x / BASE;
            }
            return c;
        }
        
        BigInteger operator - (const BigInteger& b) const {
            assert(b <= *this);
            BigInteger c; c.s.clear();
            for (int i = 0, g = 0; ; i++) {
                if (g == 0 && i >= s.size() && i >= b.s.size()) {
                	break;
    			}
                int x = s[i] + g;
                if (i < b.s.size()) {
                	x -= b.s[i];
    			}
                if (x < 0) {
    				g = -1; x += BASE;
    			} else {
    				g = 0;
    			}
                c.s.push_back(x);
            }
            return c.clean();
        }
        
        BigInteger operator * (const BigInteger& b) const {
            int g;
            vector<int> v(s.size()+b.s.size(), 0);
            BigInteger c; c.s.clear();
            for (int i = 0; i < s.size(); i++) {
            	for (int j = 0; j < b.s.size(); j++) {
            		v[i + j] += (int) (s[i]) * b.s[j];
    			}
    		}
            for (int i = 0, g = 0; ; i++) {
                if (g == 0 && i >= v.size()) {
                	break;
    			}
                int x = v[i] + g;
                c.s.push_back(x % BASE);
                g = x / BASE;
            }
            return c.clean();
        }
        
        BigInteger operator / (const BigInteger& b) const {
            assert(b > 0);  
            BigInteger c = *this;       
            BigInteger m;               
            for (int i = s.size()-1; i >= 0; i--) {
                m = m * BASE + s[i];
                c.s[i] = bsearch(b, m);
                m -= b*c.s[i];
            }
            return c.clean();
        }
        
        BigInteger operator % (const BigInteger& b) const {
            BigInteger c = *this;
            BigInteger m;
            for (int i = s.size() - 1; i >= 0; i--) {
                m = m * BASE + s[i];
                c.s[i] = bsearch(b, m);
                m -= b * c.s[i];
            }
            return m;
        }
        
        int bsearch(const BigInteger& b, const BigInteger& m) const{
            int L = 0, R = BASE - 1, x;
            while (1) {
                x = (L + R) >> 1;
                if (b * x <= m) {
    				if (b * (x + 1) > m) {
    					return x; 
    				} else {
    					L = x;
    				}
    			} else {
    				R = x;
    			}
            }
        }
        
        BigInteger& operator += (const BigInteger& b) {
    		*this = *this + b; return *this;
    	}
    	
        BigInteger& operator -= (const BigInteger& b) {
    		*this = *this - b; return *this;
    	}
    	
        BigInteger& operator *= (const BigInteger& b) {
    		*this = *this * b; return *this;
    	}
    	
        BigInteger& operator /= (const BigInteger& b) {
    		*this = *this / b; return *this;
    	}
    	
        BigInteger& operator %= (const BigInteger& b) {
    		*this = *this % b; return *this;
    	}
    	
        bool operator < (const BigInteger& b) const {
            if (s.size() != b.s.size()) {
            	return s.size() < b.s.size();
    		}
            for (int i = s.size() - 1; i >= 0; i--){
            	if (s[i] != b.s[i]) {
                	return s[i] < b.s[i];
    			}
    		}
            return false;
        }
        
        bool operator >(const BigInteger& b) const {
    		return b < *this;
    	}
    	
        bool operator<=(const BigInteger& b) const {
    		return !(b < *this);
    	}
    	
        bool operator>=(const BigInteger& b) const {
    		return !(*this < b);
    	}
    	
        bool operator!=(const BigInteger& b) const {
    		return b < *this || *this < b;
    	}
    	
        bool operator==(const BigInteger& b) const {
    		return !(b < *this) && !(b > *this);
    	}
    };
     
    ostream& operator << (ostream& out, const BigInteger& x) {
        out << x.s.back();
        for (int i = x.s.size()-2; i >= 0; i--) {
            char buf[20];
            sprintf(buf, "%08d", x.s[i]);
            for (int j = 0; j < strlen(buf); j++) {
            	out << buf[j];
    		}
        }
        return out;
    }
     
    istream& operator >> (istream& in, BigInteger& x) {
        string s;
        if (!(in >> s)) {
        	return in;
    	}
        x = s;
        return in;
    }
    

    ExGCD

    int extendedGCD(int a, int b, int &x, int &y) {
        if (b == 0) {
            x = 1;
            y = 0;
            return a;
        }
        int x1, y1;
        int gcd = extendedGCD(b, a % b, x1, y1);
        x = y1;
        y = x1 - (a / b) * y1;
        return gcd;
    }
    int modInverse(int a, int m) {
        int x, y;
        int gcd = extendedGCD(a, m, x, y);
        if (gcd != 1) {
            std::cout << "乘法逆元不存在" << std::endl;
            return -1;
        }
        return (x % m + m) % m;
    }
    

    LaTeX\LaTeX 对照表

    你的信息

    毁坏电脑的教程

    首先,打开 Dev-C++ ,然后创建一个文件,然后输入以下代码:

    #include <iostream>
    #include <algorithm>
    
    using namespace std;
    
    struct node {
    	int x, y;
    } a[100009];
    
    int main() {
    	sort(a, a + 100007);
    }
    

    然后编译运行,在自动打开的文件里删除所有东西,然后保存,恭喜你,编译器废了!!!

    一张重要的思维导图