1 solutions

  • 0
    @ 2025-11-5 16:04:16

    C++ :

    #include<cstdio>
    #include<algorithm>
    #include<queue>
    #include<cstring>
    #define MAXN 500001
    #define f(i,j) A[i]*j*j+B[i]*j+C[i]
    #define LL long long
    using namespace std;
    int A[MAXN],B[MAXN],C[MAXN];
    struct node{
    	int pos,da;
    	LL v;
    }p[MAXN<<1]; 
    int n,m,len=0,tot=0;
    void my_swap(int a,int b){
    	int t1=p[a].pos,t2=p[a].da;
    	LL t3=p[a].v;
    	p[a].pos=p[b].pos;
    	p[a].da=p[b].da;
    	p[a].v=p[b].v;
    	p[b].pos=t1;
    	p[b].da=t2;
    	p[b].v=t3;
    	return;
    }
    void insert(int,int);
    void downt();
    int main(){
    	//freopen("minval.in","r",stdin);
    	//freopen("minval.out","w",stdout);
    	scanf("%d%d",&n,&m);
    	for(int i=1;i<=n;i++){
    		scanf("%d%d%d",&A[i],&B[i],&C[i]);
    		insert(i,1);
    	}
    	while(1){
    		if(tot==m) break;
    		printf("%d ",p[1].v);
    		insert(p[1].pos,p[1].da+1);
    		downt();
    		tot++;
    	}
    	return 0;
    }
    void downt(){
    	my_swap(len,1);
    	len--;
    	int x=1;
    	while(1){
    		int aim=x<<1;
    		if(aim>len) break;
    		if(p[aim].v>p[aim+1].v&&aim+1<=len) aim++;
    		 if(p[aim].v<p[x].v){
    		 	my_swap(x,aim);
    		 	x=aim;
    		 	continue;
    		 }
    		 else break;
    	}
    	return;
    }
    void insert(int x,int t){
    	len++;
    	int tem=f(x,t);
    	p[len].pos=x;
    	p[len].da=t;
    	p[len].v=tem;
    	if(len==1) return;
    	else{
    		int tp=len;
    		while(1){
    			int aim=tp>>1;
    			if(p[tp].v<p[aim].v){
    				my_swap(tp,aim);
    			}
    			else break;
    			tp=aim;
    		}
    	}
    }
    
    • 1

    Information

    ID
    17479
    Time
    1000ms
    Memory
    128MiB
    Difficulty
    (None)
    Tags
    # Submissions
    0
    Accepted
    0
    Uploaded By