关于RE
查看原帖
关于RE
384035
Mysterious_Cat楼主2021/12/16 22:10
#include<bits/stdc++.h>
using namespace std;

const int NR = 2e5 + 5;

int n, x, tot, dfn, rt[NR + 5];
long long res1, res2, ans;

struct Node {
	int l, r, cnt;
} tree[NR * 15 + 5];

void pushup(int p) {
	tree[p].cnt = tree[tree[p].l].cnt + tree[tree[p].r].cnt;
}

void modify(int &p, int l, int r, int k, int v) {
	if(p == 0) p = ++tot;
	if(l == r) {
		tree[p].cnt++;
		return;
	}
	int mid = (l + r) / 2;
	if(k <= mid) modify(tree[p].l, l, mid, k, v);
	else modify(tree[p].r, mid + 1, r, k, v);
	pushup(p);
}

int merge(int a, int b, int l, int r) {
	if(a == 0) return b;
	if(b == 0) return a;
	if(l == r) {
		tree[a].cnt += tree[b].cnt;
		return a;
	}
	res1 += tree[tree[a].r].cnt * tree[tree[b].l].cnt;
	res2 += tree[tree[a].l].cnt * tree[tree[b].r].cnt;
	int mid = (l + r) / 2;
	tree[a].l = merge(tree[a].l, tree[b].l, l, mid);
	tree[a].r = merge(tree[a].r, tree[b].r, mid + 1, r);
	pushup(a);
	return a;
}

int solve() {
	scanf("%d", &x);
	if(x == 0) {
		int ls = solve();
		int rs = solve();
		res1 = res2 = 0;
		rt[ls] = merge(rt[ls], rt[rs], 1, n);
		ans += min(res1, res2);
		return ls;
	}
	modify(rt[x], 1, n, x, 1);
	return x;
}

int main() {
	scanf("%d", &n);
	solve();
	printf("%lld\n", ans);
	
	return 0;
} 

显示 Segmentation fault with invalid memory reference. 不知道为什么

2021/12/16 22:10
加载中...