求助,样例都过不了
查看原帖
求助,样例都过不了
173864
NaN_HQJ2007_NaN楼主2021/3/14 16:48
#include <bits/stdc++.h>
using namespace std;

typedef long long LL;
const int N = 1e5 + 5, N2 = 2e5 + 5;
int n, k;
LL ans[N], x[N2];
map<LL, int> mp;
struct edge {
	int a, b, c;
	LL ans;
}p[N], q[N];
bool cmp(const edge &x, const edge &y) {
	return x.a < y.a;
}
int lowbit(int x) {
	return x & (-x);
}
void modify(int i, int v) {
	for (; i <= k; i += lowbit(i)) x[i] += v;
	return;
}
LL query(int i) {
	LL ret = 0;
	for (; i; i -= lowbit(i)) ret += x[i];
	return ret;
}
void merge_sort(int l, int r) {
	if (l == r) return;
	int mid = (l + r) >> 1;
	merge_sort(l, mid);
	merge_sort(mid + 1, r);
	int p1 = l, p2 = mid + 1, tot = 0;
	while (p1 <= mid || p2 <= r) {
		if (p1 <= mid && (p2 > r || p[p1].b <= p[p2].b)) {
			q[++tot] = p[p1];
			modify(p[p1].c, 1);
			p1++;
		} else {
			p[p2].ans += query(p[p2].c);
			q[++tot] = p[p2];
			p2++;
		}
	}
	for (int i = l; i <= mid; ++i) modify(p[i].c, -1);
	for (int i = 1; i <= tot; ++i) p[l + i - 1] = q[i];
	return;
}

int main() {
	scanf("%d%d", &n, &k);
	for (int i = 1; i <= n; ++i) {
		scanf("%d%d%d", &p[i].a, &p[i].b, &p[i].c);
		p[i].ans = 0;
	}
	sort(p + 1, p + n + 1, cmp);
	merge_sort(1, n);
	for (int i = 1; i <= n; ++i) ++mp[p[i].ans];
	for (int i = 0; i < n; ++i) printf("%d\n", mp[i]);
	return 0;
}
2021/3/14 16:48
加载中...