| 比赛 | 
    20120413 | 
    评测结果 | 
    AAAAAAAAAAAA | 
    | 题目名称 | 
    工作进度 | 
    最终得分 | 
    100 | 
    | 用户昵称 | 
    201101 | 
    运行时间 | 
    0.000 s  | 
    | 代码语言 | 
    C++ | 
    内存使用 | 
    0.00 MiB  | 
    | 提交时间 | 
    2012-04-13 19:55:29 | 
显示代码纯文本
/*
UID:cheepok
PID:joba
LANG:C++
*/
#include<stdio.h>
#include<stdlib.h>
#include<set>
using namespace std;
typedef long long Int;
multiset <int> s;
struct orz
{int x,y;}
a[100001];
int n;
Int ans;
int cmp(const void *a,const void *b)
{return (*(orz *)a).x-(*(orz *)b).x;}
int main()
{
	freopen("joba.in","r",stdin);
	freopen("joba.out","w",stdout);
	int i;
	multiset <int> ::iterator it;
	scanf("%d",&n);
	for(i=1;i<=n;i++)scanf("%d%d",&a[i].x,&a[i].y);
	qsort(a+1,n,sizeof(orz),cmp);
	for(i=1;i<=n;i++)
	{
		ans+=a[i].y;
		s.insert(a[i].y);
		if(s.size()>a[i].x)
		{
			it=s.begin();
			ans-=*it;
			s.erase(it);
		}
	}
	printf("%lld\n",ans);
	return 0;
}