80pts 码风良好手写堆求调
查看原帖
80pts 码风良好手写堆求调
1072502
Zskioaert1106楼主2024/12/7 15:43

rt,提交记录

#include<iostream>
using namespace std;
int n,m;
long long a[10004],b[10004],c[10004];
struct Q{
	int i,j;
	long long data;
}q[10004];
int tot;
void pushup(int x){
	if(x==1)return;
	int t=(x>>1);
	if(q[x].data<q[t].data){
		swap(q[x],q[t]);
		pushup(t);
	}
}
void pushdown(int x){
	int t=(x<<1);
	if(t>tot)return;
	if(t<tot&&q[t+1].data<q[t].data)t++;
	if(q[x].data>q[t].data){
		swap(q[x],q[t]);
		pushdown(t);
	}
}
int main(){
	cin>>n>>m;
	for(int i=1;i<=n;i++){
		cin>>a[i]>>b[i]>>c[i];
		tot++;
		q[tot].i=i,q[tot].j=1,q[tot].data=a[i]+b[i]+c[i];
		pushup(tot);
	}
	while(m--){
		cout<<q[1].data<<' ';
		swap(q[1],q[tot]);
		tot--;
		pushdown(1);
		tot++;
		q[tot].j++,q[tot].data=a[q[tot].i]*q[tot].j*q[tot].j+b[q[tot].i]*q[tot].j+c[q[tot].i];
	}
	return 0;
}
2024/12/7 15:43
加载中...