zoukankan      html  css  js  c++  java
  • bzoj1537

    dp+树状数组

    一维排序,一维离散化,然后跑lis,其实就是一个二维偏序

    #include<bits/stdc++.h>
    using namespace std;
    const int N = 200010;
    int dp[N], tree[N];
    struct data {
        int x, y, p;
        inline bool friend operator < (data A, data B)
        {
            return A.x == B.x ? A.y < B.y : A.x < B.x;
        }
    } a[N];
    int n, m, k, ans;
    inline int lowbit(int i)
    {
        return i & (-i);
    }
    inline void update(int pos, int delta)
    {
        for(int i = pos; i <= m; i += lowbit(i)) tree[i] = max(tree[i], delta);
    }
    inline int query(int pos)
    {
        int ret = 0;
        for(int i = pos; i; i -= lowbit(i)) ret = max(ret, tree[i]);
        return ret;
    } 
    int main()
    {
        scanf("%d%d%d", &n, &m, &k);
        vector<int> vt;
        for(int i = 1; i <= k; ++i) 
        {
            scanf("%d%d%d", &a[i].x, &a[i].y, &a[i].p);
            vt.push_back(a[i].y);
        }
        sort(vt.begin(), vt.end());
        vt.erase(unique(vt.begin(), vt.end()), vt.end());
        for(int i = 1; i <= k; ++i) a[i].y = lower_bound(vt.begin(), vt.end(), a[i].y) - vt.begin() + 1;
        m = vt.size() + 10;
        sort(a + 1, a + k + 1);
        for(int i = 1; i <= k; ++i)
        {
            dp[i] = query(a[i].y) + a[i].p;
            ans = max(ans, dp[i]);
            update(a[i].y, dp[i]);
        }
        printf("%d
    ", ans);
        return 0;
    }
    
    View Code
  • 相关阅读:
    webpack:loader编写
    架构之路:从概念开始
    AtCoder Regular Contest 114(A-C)
    12-UE4-控件类型
    10-UE4-蓝图定义简介
    11-UE4-UMG UI设计器
    UE4-目录结构简介
    UE4-字符串
    官方Spring Boot starters整理
    Java是引用传递还是值传递?
  • 原文地址:https://www.cnblogs.com/19992147orz/p/7414101.html
Copyright © 2011-2022 走看看