线段覆盖1~5
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
struct qer
{
	int l;
	int r;
	int cd;
}q[110];
bool cmp(qer a, qer b)
{
	return a.r < b.r;
}
int main()
{
	int n;
	cin>>n;
	for(int i = 1;i <= n;i ++)
	{
		cin>>q[i].l>>q[i].r;
		if(q[i].l>q[i].r)
			swap(q[i].l,q[i].r);
		q[i].cd = q[i].r - q[i].l;
	}
	sort(q+1, q+n+1, cmp);
	int ans = 0;
	int min = -1000001;
	for(int i = 1;i <= n;i ++)
	{
		if(q[i].l >= min)
		{
			ans++;
			min = q[i].r;
		}
	}
	cout<<ans;
	return 0;
}
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
struct sugar
{
    int st,ed,w;
}a[10010];
int n;
int main()
{
    scanf("%d",&n);
    for(int i = 1 ; i <= n ; i++) scanf("%d%d%d",&a[i].st,&a[i].ed,&a[i].w);
    for(int i = 1 ; i <= n ; i++)
        for(int j = i + 1 ; j <= n ; j++)
            if(a[i].st > a[j].st) swap(a[i],a[j]);//冒泡大法好
    int ans = 1;
    for(int i = 1 ; i <= n ; i++)
    {
        int k = 0;
        for(int j = 1 ; j <= n ; j++) if(a[i].st >= a[j].ed) k = max(k,a[j].w);
        a[i].w += k;
        ans = max(ans,a[i].w);
    }
    printf("%d",ans);
    return 0;
}
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
struct xd
{
	int l, r;
}x[1000005];
bool cmp(xd a, xd b)
{
	return a.r < b.r;
}
int main()
{
	int n, ans = 0;
	cin>>n;
	for (int i = 1; i <= n; i++)
		scanf("%d%d", &x[i].l, &x[i].r);
	sort (x + 1, x + n + 1, cmp);
	int rr = 0;
	for(int i = 1; i <= n; i++)
	{
		if(x[i].l >= rr)
		{
			ans ++;
			rr = x[i].r;
		}
	}
	cout<<ans;
	return 0;
}
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
long long dp[1000005];
struct xd
{
	int l, r, d;
}x[2333333];
bool cmp(xd a, xd b)
{
	return a.r < b.r;
}
int main()
{
	int n;
	cin>>n;
	for (int i = 1; i <= n; i++)
		scanf("%d%d%d", &x[i].l, &x[i].r, &x[i].d);
	sort (x + 1,  x + n + 1, cmp);
	for (int i = 1; i <= n; i++)
	{
		int l = 1, r = i, ans = 0;
		while (r - l >= 0)
		{
			int mid = (l + r) >> 1;
			if(x[mid].r <= x[i].l)
			{
				ans = mid;
				l = mid + 1;
			}
			else
				r = mid - 1;
		}
		dp[i] = max (dp[i - 1], dp[ans] + x[i].d);
	}
	cout<<dp[n];
	return 0;
}
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
typedef long long ll;
ll dp[1000005];
struct xd
{
	ll l, r, d;
}x[2333333];
bool cmp(xd a, xd b)
{
	return a.r < b.r;
}
int main()
{
	int n;
	cin>>n;
	for (int i = 1; i <= n; i++)
		scanf("%lld%lld%lld", &x[i].l, &x[i].r, &x[i].d);
	sort (x + 1,  x + n + 1, cmp);
	for (int i = 1; i <= n; i++)
	{
		ll l = 1, r = i, ans = 0;
		while (r - l >= 0)
		{
			ll mid = (l + r) >> 1;
			if(x[mid].r <= x[i].l)
			{
				ans = mid;
				l = mid + 1;
			}
			else
				r = mid - 1;
		}
		dp[i] = max (dp[i - 1], dp[ans] + x[i].d);
	}
	cout<<dp[n];
	return 0;
}

 

上一篇
下一篇