摘要:
给定一个长度为 n 的整数数列,请你计算数列中的逆序对的数量。每个数字不超过1e9。 int n, m; int a[N]; int tr[N]; vector<int>lan; int lowbit(int x){ return x&(-x); } void discrete() { sort(l 阅读全文
摘要:
const int N = 1e5 + 10; int n, m; int a[N]; struct Tree{ int l,r; ll sum,add; }tr[4*N]; void build(int u,int l,int r){ // l=tr[u].l;r=tr[u].r; //注释掉的部 阅读全文
摘要:
对于种类并查集主要是考虑清楚到根节点距离分为几类,每一类的意义 有的题目相出d数组的含义才能想到用带权并查集 //find函数需要变化 int find(int x) { if (p[x] != x) { int root = find(p[x]); d[x] += d[p[x]]; p[x] = 阅读全文
摘要:
维护一个字符串集合,支持两种操作: I x 向集合中插入一个字符串 ; Q x 询问一个字符串在集合中出现了多少次。 所有输入的字符串总长度不超过 ( 也就是节点数) const int N=100010; int n; char s[N]; int ch[N][26],c 阅读全文
摘要:
https://zhuanlan.zhihu.com/p/646586178 待补 阅读全文
摘要:
单哈希且用自然溢出代替取模操作,常数小但是容易被卡 单字符串区间内比较,查询子串hash值 typedef unsigned long long ULL; const int N = 100010, P = 131; int n, m; char str[N]; ULL h[N], p[N]; UL 阅读全文
摘要:
时间复杂度O(nm^2),理论上限 //n,m,s,t,分别代表该网络的点数n,网络的边数m,源点编号s,汇点编号t。 const int N=5010,M=100010,INF=1e8; int n,m,S,T; struct edge{int v,c,w,ne;}e[M]; int h[N],i 阅读全文
摘要:
时间复杂度为Θ(n^3) const int inf =0x3f3f3f3f; const int N=505; long long w[N][N]; long long la[N],lb[N]; bool va[N],vb[N]; long long match[N]; long long n,m 阅读全文
摘要:
#define LL long long #define N 10010 #define M 200010 using namespace std; int n,m,S,T; //n,m,s,t,分别表示点的个数、有向边的个数、源点序号、汇点序号 struct edge{LL v,c,ne;}e[M 阅读全文
摘要:
二分图最大匹配可以转换成网络流模型。 将源点连上左边所有点,右边所有点连上汇点,容量皆为1。原来的每条边从左往右连边,容量也皆为1,最大流即最大匹配。 如果使用 Dinic 算法 求该网络的最大流,可在O(sqrt(n) * m)求出。 #define N 1010 #define M 200001 阅读全文
摘要:
scc:极大的强连通子图(两两相互可达) const int N=10010; int n,m,a,b; vector<int> e[N]; int dfn[N],low[N],tot; int stk[N],instk[N],top; int scc[N],siz[N],cnt; void tar 阅读全文
摘要:
单测试点有多组测试数据,注意fill手动清空 int e[M],ne[M],w[M],h[N],idx; int d[N],cnt[N],vis[N]; //为了卡常用spfa的时候就用链式前向星 void init(){ fill(h,h+n+1,-1);idx=0; } void add(int 阅读全文