CodeVS 3012 & 3037 线段覆盖4 & 5

来源:互联网 发布:淘宝服装模特摄影 编辑:程序博客网 时间:2024/06/05 03:07
//dp[i]表示到枚举完i时的最优解//二分找前面的线段进行转移//!!!二分时将符合的答案先记下来以备作为结果,以l为答案会错 #include<bits/stdc++.h>using namespace std;const int maxn = 1000010;int n;long long dp[maxn];struct node{    long long l, r;    long long w;} a[maxn];inline bool cmp(node x, node y){    //if(x.r == y.r)    return x.l < y.l;    return x.r < y.r;}long long dive(long long lft, long long rht, long long now){    long long mid, ans;    while(lft < rht){        mid = lft + rht >> 1;        if(a[mid].r <= now){            ans = mid;            lft = mid + 1;        }           else rht = mid;    }    return ans;}int main(){    scanf("%d", &n);    for(int i = 1; i <= n; i++)        scanf("%d%d%d", &a[i].l, &a[i].r, &a[i].w);    sort(a+1, a+n+1, cmp);    long long ans = 0;    for(int i = 1; i <= n; i++){        dp[i] = max(dp[dive(0, i, a[i].l)]+a[i].w, dp[i-1]);        ans = max(ans, dp[i]);    }    printf("%lld\n", ans);    return 0;}
原创粉丝点击