Wrong answer on test 7
查看原帖
Wrong answer on test 7
126972
Kevinx楼主2023/11/15 14:03

rt 调了一早上,救救孩子吧

#include<bits/stdc++.h>
#define ll long long
using namespace std;
const int N = 500000 + 20;
ll n, k, b[N], ans = 0;
bool vis[N];
struct node{
	ll val, l, r, id;
	bool friend operator < (const node &a, const node &b) {
		return a.val > b.val;
	} 
}a[N];
priority_queue<node> q;
int main (){
	scanf("%lld%lld", &k, &n);
	for(int i = 1; i <= n; i++) scanf("%lld", &b[i]);
	sort(b + 1, b + n + 1);
	for(int i = 1; i < n; i++) {
	a[i].val = b[i + 1] - b[i];	
	a[i].l = i - 1, a[i].r = i + 1;
	a[i].id = i;
	q.push(a[i]);
	}
	n--;
	a[0].val = a[n + 1].val = 1e18 + 1;
	for(int i = 1; i <= k; i++) {
		node x;
		while(!q.empty()) {
			x = q.top();
			q.pop();
			if(vis[x.id] == 0) break;
		}
		x.val = a[x.id].val;
        ans += x.val;
		x.l = a[x.id].l;
		x.r = a[x.id].r;
		vis[x.l] = vis[x.r] = 1;
		a[x.id].val = a[x.l].val + a[x.r].val - a[x.id].val;
		
		a[x.id].r = a[x.r].r;
		a[x.id].l = a[x.l].l;
		
		a[a[x.l].l].r = x.id;
		a[a[x.r].r].l = x.id;
		
		q.push(a[i]);
	}
	printf("%lld\n", ans);
	
	return 0;
}
/*
2 5
1 2 4 13 15
*/
2023/11/15 14:03
加载中...