Online JudgeProblem SetAuthorsOnline ContestsUser
Web Board
F.A.Qs
Statistical Charts
Problems
Submit Problem
Online Status
Prob.ID:
Register
Authors ranklist
Current Contest
Past Contests
Scheduled Contests
Award Contest
Register

## Re:优先队列，特别注意的地方就是题目并不是一定按顺序输入。一道简单的题目。附代码

Posted by GloriaSeven at 2016-10-27 15:14:32 on Problem 2431
In Reply To:优先队列，特别注意的地方就是题目并不是一定按顺序输入。一道简单的题目。附代码 Posted by:13408100238 at 2014-08-09 09:41:44
```> #include"iostream"
> #include"cstdio"
> #include"cstring"
> #include"queue"
> #include"algorithm"
> using namespace std;
> const int ms=1e5+5;
> struct node
> {
> 	int a,b;
> }a[ms];
> bool cmp(const node &a1,const node &a2)
> {
> 	return a1.a<a2.a;
> }
> int n,l,p;
> void input()
> {
> 	scanf("%d",&n);
> 	for(int i=0;i<n;i++)
> 	{
> 		scanf("%d%d",&a[i].a,&a[i].b);
> 	}
> 	scanf("%d%d",&l,&p);
> 	for(int i=0;i<n;i++)
> 		a[i].a=l-a[i].a;
> 	a[n].a=l;
> 	a[n].b=0;
> 	n++;
> 	sort(a,a+n,cmp);
> }
> void solve()
> {
> 	int i,d,pos=0,tank=p,ans=0;
> 	priority_queue<int> q;
> 	for(i=0;i<n;i++)
> 	{
> 		d=a[i].a-pos;
> 		while(tank<d)
> 		{
> 			if(q.empty())
> 			{
> 				puts("-1");
> 				return ;
> 			}
> 			tank+=q.top();
> 			q.pop();
> 			ans++;
> 		}
> 		tank-=d;
> 		pos=a[i].a;
> 		q.push(a[i].b);
> 	}
> 	cout<<ans<<endl;
> 	return ;
> }
> int main()
> {
> 	input();
> 	solve();
> 	return 0;
> }
```

Followed by: