用的拓展树状数组取代的线段树,但是不知道什么问题WA了两个点,80分:

请各位
代码:
#include <algorithm>
#include <cstring>
#include <iostream>
#define int long long
using namespace std;
struct cow {
int l, r, s;
};
const int N = 1e4 + 10, M = 1e5 + 10, m = 1e5 + 5;
cow cows[N];
int n, s, e;
int c[M], a[M];
int f[N], ans = 0x3f3f3f3f3f3f3f3fll;
int lowbit(int x) {
return x & -x;
}
int getmin(int l, int r) {
int ans = 0x3f3f3f3f3f3f3f3fll;
while (r >= l) {
ans = min(ans, a[r]);
r--;
for (; r - lowbit(r) >= l; r -= lowbit(r)) ans = min(ans, c[r]);
}
return ans;
}
void update(int x, int v) {
a[x] = v;
for (int i = x; i <= m; i += lowbit(i)) {
c[i] = a[i];
for (int j = 1; j < lowbit(i); j *= 2) c[i] = min(c[i], c[i - j]);
}
}
signed main() {
memset(f, 0x3f, sizeof(f));
memset(a, 0x3f, sizeof(a));
memset(c, 0x3f, sizeof(c));
scanf("%lld%lld%lld", &n, &s, &e);
if (s == e) {
printf("0");
return 0;
}
s += 2, e += 2;
for (int i = 1; i <= n; i++) {
scanf("%lld%lld%lld", &cows[i].l, &cows[i].r, &cows[i].s);
cows[i].l += 2, cows[i].r += 2;
}
sort(cows + 1, cows + n + 1, [](cow a, cow b) {return a.r < b.r;});
for (int i = 1; i <= n; i++)
if (cows[i].l <= s)
f[i] = cows[i].s;
for (int i = 1; i <= n; i++)
update(cows[i].r, (f[i] = min(f[i], getmin(cows[i].l - 1, cows[i].r - 1) + cows[i].s)));
for (int i = n; i >= 1 && cows[i].r >= e; i--)
ans = min(ans, f[i]);
if (ans == 0x3f3f3f3f3f3f3f3f) printf("-1");
else printf("%lld", ans);
return 0;
}