【codevs3037/codevs3095】线段覆盖5/黑心的市长

这个题和线段覆盖4没有本质区别,就是加了个离散化,而且这个题有双倍经验

线段覆盖5

#include<algorithm>
#include<iostream>
#include<cstdio>
using namespace std;
int n,tail;
long long da[2000020],ans[1000010];
struct in
{
    long long l,r,c;
}ter[1000010];
bool cmp(in a,in b)
{
    return a.r<b.r;
}
int main()
{
    scanf("%d",&n);
    for(int i=1;i<=n;i++)
    {
        scanf("%lld%lld%lld",&ter[i].l,&ter[i].r,&ter[i].c);
        if(ter[i].l>ter[i].r)
            swap(ter[i].l,ter[i].r);
        da[++tail]=ter[i].l,da[++tail]=ter[i].r;//把所有的点都放在一个数组里面,便于离散化 
    }
    sort(da+1,da+1+tail);//先排序 
    tail=unique(da+1,da+1+tail)-da-1;//去重,得到数组最后一个元素下标 
    sort(ter+1,ter+1+n,cmp);
    for(int i=1;i<=n;i++)//lower_bound是二分查找第一个大于或等于指定数的数字 
        ter[i].l=lower_bound(da+1,da+1+tail,ter[i].l)-da,ter[i].r=lower_bound(da+1,da+1+tail,ter[i].r)-da;
    int pos=0,i=1;
    for(pos=1;i<=n;pos++)//其余和线段覆盖4无区别 
    {
        ans[pos]=ans[pos-1];
        while(pos==ter[i].r&&i<=n)
            ans[pos]=max(ans[pos],ans[ter[i].l]+ter[i].c),i++;
    }
    printf("%lld",ans[pos-1]);
}

 黑心的市长

#include<algorithm>
#include<iostream>
#include<cstdio>
using namespace std;
int n,m,tail;
long long da[2000020],ans[1000010];
struct in
{
    long long l,r,c;
}ter[1000010];
bool cmp(in a,in b)
{
    return a.r<b.r;
}
int main()
{
    scanf("%d%d",&n,&m);
    for(int i=1;i<=m;i++)
    {
        scanf("%lld%lld%lld",&ter[i].l,&ter[i].r,&ter[i].c);
        if(ter[i].l>ter[i].r)
            swap(ter[i].l,ter[i].r);
        da[++tail]=ter[i].l,da[++tail]=ter[i].r;//把所有的点都放在一个数组里面,便于离散化 
    }
    sort(da+1,da+1+tail);//先排序 
    tail=unique(da+1,da+1+tail)-da-1;//去重,得到数组最后一个元素下标 
    sort(ter+1,ter+1+m,cmp);
    for(int i=1;i<=m;i++)//lower_bound是二分查找第一个大于或等于指定数的数字 
        ter[i].l=lower_bound(da+1,da+1+tail,ter[i].l)-da,ter[i].r=lower_bound(da+1,da+1+tail,ter[i].r)-da;
    int pos=0,i=1;
    for(pos=1;i<=m;pos++)//其余和线段覆盖4无区别 
    {
        ans[pos]=ans[pos-1];
        while(pos==ter[i].r&&i<=m)
            ans[pos]=max(ans[pos],ans[ter[i].l]+ter[i].c),i++;
    }
    printf("%lld",ans[pos-1]);
}

 

posted @ 2017-10-24 16:53  那一抹落日的橙  阅读(217)  评论(0编辑  收藏  举报