GYM 101889F(树状数组)

bit扫描坐标套路题,注意有重复的点,莽WA了。

const int maxn = 1e5 + 5;
struct node {
    ll B, F, D;

    bool operator < (const node &rhs) const {
        if (B != rhs.B) return B > rhs.B;
        return F < rhs.F;
    }
}a[maxn];
int n, tot;
ll c[maxn], ans;
struct BIT {
    ll t[maxn];

    void Modify(int x, ll val) {
        for (; x; x -= x&-x)
            t[x] = max(t[x], val);
    }

    ll Query(int x) {
        ll ret = 0;
        for (; x <= tot; x += x&-x)
            ret = max(t[x], ret);
        return ret;
    }
}T;

int main() {
    read(n);
    rep(i, 1, n) {
        read(a[i].B);
        read(a[i].F);
        read(a[i].D);
        c[++tot] = a[i].F;
    }

    sort(c + 1, c + tot + 1);
    tot = unique(c + 1, c + 1 + tot) - c - 1;
    rep(i, 1, n) {
        a[i].F = lower_bound(c + 1, c + 1 + tot, a[i].F) - c;
    }
    sort(a + 1, a + 1 + n);

    ll tmp = 0;
    rep(i, 1, n) {
        if (a[i].B == a[i - 1].B && a[i].F == a[i - 1].F)
            tmp += a[i].D;
        else    tmp = T.Query(a[i].F + 1) + a[i].D;
        ans = max(ans, tmp);
        T.Modify(a[i].F, tmp);
    }
    writeln(ans);
    return 0;
}

转载于:https://www.cnblogs.com/AlphaWA/p/10673953.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值