C. Odd Process

Revision en1, by wqy_03, 2025-12-13 14:41:42

include<bits/stdc++.h>

using namespace std;

define int long long

int T; signed main(){ cin>>T; while(T--){ int n; cin>>n; vector odd,even; int maxn=0; for(int i=1;i<=n;i++){ int x; cin>>x; if(x%2==1) { maxn=max(maxn,x); odd.push_back(x); } else even.push_back(x); } sort(odd.begin(),odd.end(),greater()); sort(even.begin(),even.end(),greater()); vector sum(even.size()+10,0); for(int i=1;i<=(int)even.size();i++){ sum[i]=sum[i-1]+even[i-1]; } if(odd.size()==0){ for(int i=1;i<=n;i++){ cout<<0<<" "; } cout<<endl; continue; } for(int k=1;k<=n;k++){ int r=min((int)even.size(),k-1); if(r<0) { cout<<0<<" "; continue; } int last=k-1-r; int ans=0,ok=0; if(last%2==0){ if(last<=(int)odd.size()-1){ ans=maxn+sum[r]; ok=1; } } else{ if(r<=(int)even.size()-1 && last<=(int)odd.size()){ ans=maxn+sum[r]; ok=1; } } if(ok){ cout<<ans<<" "; } else{ r-=1; if(r<0){ cout<<0<<" "; continue; } last=k-1-r; if(last%2==0){ if(last<=(int)odd.size()-1){ ans=maxn+sum[r]; ok=1; } } else{ if(r<=(int)even.size()-1 && last<=(int)odd.size()){ ans=maxn+sum[r]; ok=1; } } cout<<ans<<" ";
} } cout<<endl; } return 0; }

History

 
 
 
 
Revisions
 
 
  Rev. Lang. By When Δ Comment
en2 English wqy_03 2025-12-13 14:42:39 24
en1 English wqy_03 2025-12-13 14:41:42 2330 Initial revision (published)