rt,通过对 a 排序去重,然后把 ai−ai+1 装入堆中求答案,感觉是对的但是 60pts,求 hack。
代码:
#include<bits/stdc++.h>
using namespace std;
#define int long long
int n;
int a[1000010];
int ans[2];
int t;
int cnt;
bool cmp(int a,int b){
return a>b;
}
struct node{
int id,x,y;
bool operator <(const node &A)const{
return x<A.x;
}
};
priority_queue<node>q;
signed main(){
scanf("%lld",&n);
for(int i=1;i<=n;i++){
scanf("%lld",&a[i]);
}
sort(a+1,a+1+n,cmp);
n=unique(a+1,a+1+n)-a-1;
a[n+1]=0;
for(int i=1;i<=n;i++){
q.push((node){i,a[i]-a[i+1],a[i]});
}
while(!q.empty()){
node now=q.top();
q.pop();
if(now.id<=t) continue;
ans[cnt]+=now.y;
cnt=(cnt+1)%2;
t=now.id;
}
printf("%lld",ans[0]-ans[1]);
return 0;
}