题目链接 https://www.luogu.com.cn/problem/P9561?contestId=126525
想问问为什么以下做法是错误的
大体思路是对线段离散化后求第i段线段为红色对答案的贡献数,其中dp是不同颜色的前缀和数组
ll n, m, h, x, y, z, a, b, c, d, e, u, v, w, i, j, k, l, r, nn, mm, ans, p, q, len, T, he;
ll wcnm = 1, id = 0;
struct node {
ll l, r, c;
}A[N];
bool cmp(node a, node b) {
return a.r < b.r;
}
map<ll, ll>B;
ll dp[N][3];
int main() {
ios::sync_with_stdio(0); cin.tie(0); cout.tie(0);
for (cin >> T; T; --T) {
cin >> n;
B.clear();
for (i = 1; i <= n; ++i) {
cin >> a >> b >> c;
A[i] = { a,b,2 - c };
B[a - 1] = B[a] = B[b] = B[b + 1] = 0;
}
len = 0;
for (auto& x : B)x.second = ++len;
for (i = 1; i <= n; ++i)A[i].l = B[A[i].l], A[i].r = B[A[i].r];
sort(A + 1, A + n + 1, cmp);
dp[1][0] = 1;
j = 1;
for (i = 2; i <= len; ++i) {
dp[i][0] = dp[i - 1][0];
dp[i][1] = dp[i - 1][1];
dp[i][2] = dp[i - 1][2];
while (j <= n && i == A[j].r) {
l = A[j].l, r = A[j].r, c = A[j].c;
d = dp[l - 1][0] + dp[i][c] - dp[l - 1][c];
dp[i][c] += d;
dp[i][0] += d;
++j;
}
}
cout << dp[len][0] << endl;
}
}