蒟蒻向·模板合集
  • 板块灌水区
  • 楼主FANTA5TlC
  • 当前回复7
  • 已保存回复7
  • 发布时间2020/8/29 11:17
  • 上次更新2023/11/5 14:02:59
查看原帖
蒟蒻向·模板合集
297798
FANTA5TlC楼主2020/8/29 11:17
#pragma GCC optimize(2)
#pragma GCC optimize(3)
#pragma GCC target("avx,sse2,sse3,sse4,mmx")
#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")//火车头优化
#include <bits/stdc++.h>
#define pi acos(-1)
#define m 19260817//hash
#define int _in128//扩范围
using namespace std;
template<typename T> void read(T &x) {
	int f = 1;
	x = 0;
	char c = getchar();
	while (!isdigit(c)) {
		if (c == '-') f = -1;
		c = getchar();
	}
	while (isdigit(c)) {
		x = x * 10 + c - '0';
		c = getchar();
	}
	x = x * f;
}//快读
void floyd(int n){
	for (int k = 0; k <= n; ++k)
		for (int i = 1; i <= n; ++i)
			for (int j = 1; j <= n; ++j){
				if (k == 0)
				   dp[k][i][j] = g[i][j];
				else
					dp[k][i][j] = min(dp[k - 1][i][j], dp[k - 1][i][k] + dp[k - 1][k][j]);
			}
}//floyd------最短路
void dijkstra(int n){
	for (int i = 1; i <= n; ++i){
		int mind = inf;
		int v = 0;
		for (int j = 1; j <= n; ++j)
			if (!vis[j] && d[j] < mind){
				mind = d[j];
				v = j;
			}
		if (mind == inf)
		   break;
		vis[v] = true;
		for (int j = 0; j < g[v].size(); ++j)
			d[g[v][j].v] = min(d[g[v][j].v], d[v] + g[v][j].w);
	}
}//dijkstra------单源最短路
-void write(int x)-{
	if(x < 0)
		x = ~x + 1, putchar('-');
	if(x > 9)
		write(x / 10);
	putchar(x % 10 + '0');
}//快输
void spfa(int s)
{
	queue<int> q;
	q.push(s);
	int dis[N];
	for(int i = 1; i <= n; ++i)
		dis[i] = 1e9;
	dis[s] = 0;
	while(q.size()){
		u = q.front();
		q.pop();
		vis[u] = 0;
		for(int i = head[u]; i > 0; i = e[i].next){
			v = e[i].v;
			if(dis[v] > dis[u] + e[i].d){
				dis[v] = dis[u] + e[i].d;
				if(!vis[v]){
					q.push(v);
					vis[v] = 1;
				}
			}
		}
	}
	return;
}//spfa------单源最短路
inline int getnxt(char *s, int m, int *nxt){
	nxt[1] = 0;
	for (int i = 2; i <= m; ++i){
		int &j = nxt[i];
		j = nxt[i - 1];
		while(j && s[j + 1] !=s [i])
	 	    j = nxt[j];
		if(s[j + 1] == s[i])
            j++;
	}
	return 0;
}//接下个函数
inline int KMP(char *t, int n, char *s, int m, int *nxt, int *pos)
{
	int k = 0;
	for(int i = 1, j = 0; i <= n; i++){
		while(j && s[j + 1] != t[i])
	        j = nxt[j];
		if(j < m &&s[j + 1] == t[i]) j++;
		if(j == m){
			++k;
			pos[k] = i - m + 1;
			j = nxt[j];
		}
	}
	return k;
}//KMP树
int lca(int u, int v){
	if(dep[u] < dep[v]) swap(u, v);
	for(int i = 20; i >= 0; --i)
		if(dep[f[u][i]] >= dep[v])
			u = f[u][i];
	if(u == v)
		return u;
	for(int i = 20; i >= 0; --i)
		if(f[u][i] != f[v][i]){
			u = f[u][i];
			v = f[v][i];
		}	
	return f[u][0];
}//lca
void tarjan(int u){
	s.push(u);
	dfn[u] = low[u] = ++tt;
	vis[u ]= 1;
	for(int i = head[u]; i > 0; i = e[i].next){
		int v = e[i].to;
		if(!dfn[v]){
			tarjan(v);
			low[u] = min(low[u], low[v]);
		}
		else if(vis[v])
			low[u] = min(low[u], low[v]);
	}
	if(dfn[u] == low[u]){
		int now;
		do
		{
			now = s.top();
			vis[now] = 0;
			s.pop();
			sd[now] =u ;
			if(now == u)
				break;
			num[u] += num[now];
		}while(now != u);
	}
	return;
}//tarjan------强连通分量
long long quickpower(long long x, long long k){
	long long s = 1;
	while(k){
    	if(k & 1){
    		s *= x;
			s %= z;
		}	
       	x *= x;
        x %= z;
       	k >>= 1;
    }
    return s % z;
}//快速幂
void highplus(string a1, string b1){
	int lena = strlen(a1);
    int lenb = strlen(b1);
    for (int i = 0; i < lena; ++i) a [lena - i] = a1[i] - 48;
    for (int i = 0; i < lenb; ++i) b [lenb - i] = b1[i] - 48;
    int lenc = 1 ;
    while (lenc <= lena || lenc <= lenb){
        c [lenc] = a[lenc] + b [lenc] + x;
        x = c[lenc] / 10;
        c [lenc] %= 10;
        ++lenc;
    }
    c[lenc] = x;
    if (c[lenc] == 0) --lenc;
    for (int i = lenc; i >= 1; --i) cout << c[i];
}//高精度加法
void highminus(string a1, string a2){
	int lena = strlen(n1), lenb = strlen(n2) ;
    if (lena < lenb || (lena == lenb && strcmp(n1, n2) < 0)){
        strcpy(n, n1);
        strcpy(n1, n2);
        strcpy(n2, n);
        swap(lena, lenb);
        printf("-");
    }
    for (int i = 0; i < lena; ++i) a[lena - i] = int(n1[i] - '0');
    for (int i = 0; i < lenb; ++i) b[lenb - i] = int(n2[i] - '0');
    int i = 1;
    while (i <= lena || i <= lenb){
        if (a[i] < b[i]){
            a[i] += 10;
            a[i + 1]--;
        }
        c[i] = a[i] - b[i];
        ++i;
    }
    int lenc = i;
    while (c[lenc] == 0 && lenc > 1) --lenc;
    for (int i = lenc; i >= 1 ; --i) cout << c[i];
}//高精度减法
void hightimes(string a1, string s2){
    int lena = strlen(a1), lenb = strlen(b1);
    for(int i = 0; i < lena; ++i) a[lena - i] = a1[i] - 48;
    for(int i = 0; i < lenb; ++i) b[lenb - i] = b1[i] - 48;
    for(int i = 0; i <= lena; ++i){
        x = 0;
        for (int j = 1; j <= lenb; ++j){
            c[i + j - 1] += a[i] * b[j] + x;
            x = c[i + j - 1] / 10 ;
            c[i + j - 1] %= 10 ;
        }
        c[i + lenb] = x ;
    }
    int lenc = lena + lenb;
    while (c[lenc] == 0 && lenc > 1) lenc--;
    for (int i = lenc; i > 0 ; --i) cout << c[i];
}//高精度乘法
void highdiv(string a1, string a2){
	int la = a[1].size();
    for(int i = 0; i < la; ++i)
        a[la - i - 1] = str[i] - '0';
    int x = 0;
    for(i = la - 1; i >= 0; --i) {
        c[i] = (x * 10 + a[i]) / b;
        x = (x * 10 + a[i]) % b;
    }
    lc = la;
    while(lc > 1 && c[lc - 1] == 0)
        lc--;
    for(i = 0; i < lc; i++)
        cout << c[lc - i - 1];
    cout << " " << x << endl;
}//高精度除法
signed main(){//扩大范围
	ios::sync_with_stdio(false);//加快cin
flag:
	 //做点什么
	 if (/*整些判断条件*/) goto flag;
	 while (left + 1 < right){
	 	int mid = (l + r) / 2;
		//在这里判断
		if(/*大了*/) r = mid - 1;
		else l = mid + 1
	 }//二分模板
}
2020/8/29 11:17
加载中...