比赛 |
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;
}