玄关求调
查看原帖
玄关求调
1127424
damuzhi楼主2024/10/13 13:49
#include<bits/stdc++.h>

using namespace std;

struct work {
	int d,r;//d代表题目中的d,r代表初始下标

	bool operator>(const work& a) const {
		return d > a.d;
	}
};

int n;
work d[100010];
int p[100010];
priority_queue<work, vector<work>, greater<work> > q;

bool cmp(work a,work b) {
	if(a.d< b.d)
	return a.d< b.d;
	else
	return p[a.r] > p[b.r];
	
}



int main() {
	cin >> n;
	for(int i = 0; i < n; i++) {
		cin >> d[i].d >> p[i];
		d[i].r = i;
	}
	sort(d,d+n,cmp);
	for(int i = 0; i < n; i++) {
		int d1 = d[i].d;
		int p1 = p[d[i].r];

		if(q.size() >= d1) {
			if(p[q.top().r] < p1) {
				int tmp = p[q.top().r];
				q.pop();
				q.push({d1,d[i].r});
			}
		} else {
			q.push({d1,d[i].r});
		}
	}
	long long ans = 0;
	while(!q.empty()) {
		work tmp = q.top();
		q.pop();
		cout << p[tmp.r] <<endl;
		ans += p[tmp.r];
	}
	cout << ans << endl;
	return 0;
}

2024/10/13 13:49
加载中...