p3045 93分求调
  • 板块学术版
  • 楼主nlikey
  • 当前回复0
  • 已保存回复0
  • 发布时间2023/11/4 11:21
  • 上次更新2023/11/4 13:58:51
查看原帖
p3045 93分求调
750147
nlikey楼主2023/11/4 11:21
#include<bits/stdc++.h>
using namespace std;
long long n,k,m,s=0;
long long p[1000005],c[100005];
struct qw {
	long long fo,to;
} h[1010005];
long long  len,w[105005];
void up(int p) {
	while(p>1) {
		if(h[p].fo<h[p/2].fo) {
			swap(h[p].fo,h[p/2].fo);
			p/=2;
		} else break;
	}
}
void ins(int x,int y) {
	h[++len].fo=x;
	h[len].to=y;
	up(len);
}
void down(int p) {
	long long l=p*2;
	while(l<=len) {
		if(l<len&&h[l].fo>h[l+1].fo)
			l++;
		if(h[l].fo<h[p].fo) {
			swap(h[l],h[p]);
			p=l;
			l=p*2;
		} else break;
	}
}
int inf() {
	long long re=h[1].fo;
	h[1]=h[len--]; 
	down(1);
	return re;
}
void work() {
	for(int i=1; i<=n; i++)
		w[i]=inf();
}
int main() {
	scanf("%lld%lld%lld",&n,&k,&m);
	for(int i=1; i<=n; i++) {
		scanf("%lld%lld",&p[i],&c[i]);
		ins(c[i],p[i]);
	}
	work();
	for(int i=1; i<=k; i++)
		p[i]=w[i];
	for(int i=1; i<=k; i++)
		p[i]=min(p[i],w[i]);
	sort(p+1,p+1+n);
	for(int i=1; i<=n; i++) {
		if(m>=p[i]) {
			s++;
			m-=p[i];
		} else {
			printf("%lld\n",s);
			return 0;
		}
	}
	printf("%lld\n",s);
	return 0;
}
2023/11/4 11:21
加载中...