比赛 20110729 评测结果 AWWAWAWWWAAA
题目名称 最后的利益 最终得分 50
用户昵称 .Xmz 运行时间 0.000 s
代码语言 C++ 内存使用 0.00 MiB
提交时间 2011-07-29 08:48:17
显示代码纯文本
#include <iostream>
#include <cstring>
#include <cmath>
#include <cstdlib>
#include <cstdio>
#include <algorithm>
using namespace std;
struct point
{
	int id;
	int v;
}P[20001];
int n;
bool cmp(const point &a,const point &b)
{
	return (a.v < b.v);
}

struct node
{
	int L,R;
}D[10001];

bool cmp2(const node &a,const node &b)
{
	return (a.R<b.R);
}

void init()
{
	scanf("%d",&n);
	for (int i=1;i<=n;i++)
	{
		scanf("%d%d",&P[i*2-1].v,&P[i*2].v);
		P[i*2-1].id=i*2-1;P[i*2].id=i*2;
	}
	sort(P+1,P+2*n+1,cmp);
	int t=1;
	for (int i=1;i<=2*n;i++)
	{
		if (P[i].id & 1)
		{
			D[(P[i].id+1)/2].L=i;
		}
		else
		{
			D[P[i].id/2].R=i;
		}
		if (P[i].v!=P[i+1].v) t++;
	}
	sort(D+1,D+n+1,cmp2);
}

int f[20001];

void solve()
{
	int now=1;
	for (int i=1;i<=2*n;i++)
	{
		f[i]=f[i-1];
		for (;D[now].R==i;now++)
			f[i]=max(f[i],f[D[now].L]+P[D[now].R].v-P[D[now].L].v);
	}
	printf("%d\n",f[2*n]);
}

int main()
{
	freopen("9cwy.in","r",stdin);
	freopen("9cwy.out","w",stdout);
	init();
	solve();
	return 0;
}