正好是我做过的题嘻嘻
代码附上:
#include<bits/stdc++.h> using namespace std; int n,len,ans,heap[10005]; struct node{int p,d;}a[10005]; bool cmp(node x,node y){return x.d<y.d;} void up(int p){ while(p>1){ if (heap[p]<heap[p/2]){swap(heap[p],heap[p/2]);p/=2;} else break; } } void down(int p){ int s=p*2; while(s<=len){ if (s<len&&heap[s]>heap[s+1])++s; if (heap[s]<heap[p]){swap(heap[s],heap[p]);p=s;s=p*2;} else break; } } void insert(int x){heap[++len]=x;up(len);} void extract(){heap[1]=heap[len--];down(1);} int main(){ while(scanf("%d",&n)!=EOF){ len=0;ans=0;memset(heap,0,sizeof (heap)); for(int i=1;i<=n;++i)scanf("%d%d",&a[i].p,&a[i].d); sort(a+1,a+n+1,cmp); for(int i=1;i<=n;++i){ if (a[i].d==len&&a[i].p>heap[1]){extract();insert(a[i].p);continue;} else if (a[i].d>len)insert(a[i].p); } for(int i=1;i<=len;++i)ans+=heap[i]; printf("%d\n",ans); } return 0; }
看在我写了题解的份上,点个赞再走呗~