首页 > 编程语言 > 详细

GYM 101889F(树状数组)

时间:2019-04-08 22:45:46      阅读:157      评论:0      收藏:0      [点我收藏+]

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;
}

GYM 101889F(树状数组)

原文:https://www.cnblogs.com/AlphaWA/p/10673953.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!