RE代码
#include<bits/stdc++.h>
#define maxn 50000
#define ll long long
using namespace std;
ll n,m,a[maxn],flag[maxn],b[maxn],c[maxn],tem,ans[maxn];
priority_queue<ll> q;
int main(){
scanf("%lld%lld",&n,&m);
if (m==0) return 0;
for (int i=1;i<=n;i++) scanf("%lld%lld%lld",&a[i],&b[i],&c[i]);
int now=1;
for (ll j=1;j<=n;j++){
ll low =(-1)*(b[j]/(2*a[j]));
if (low<=0) low=1;
for (ll i=low;i<=low+m;i++){
if (flag[j]) break;
ll anss=a[j]*pow(i,2)+b[j]*i+c[j];
if (!q.empty()&&q.size()==m){
if (q.top()<anss){
flag[j]=1;
}
else if (q.top()>=anss){
flag[q.top()]=1;
q.pop();
q.push(anss);
}
}
else q.push(anss);
}
}
ll mm=m;
while(!q.empty()&&mm){
ans[mm]=q.top();
q.pop();
mm--;
}
for (ll i=1;i<=m;i++) printf("%lld ",ans[i]);
}
AC代码
#include<bits/stdc++.h>
#define maxn 50000
#define ll long long
using namespace std;
ll n,m,a[maxn],b[maxn],c[maxn],tem,ans[maxn];
priority_queue<ll> q;
int main(){
scanf("%lld%lld",&n,&m);
if (m==0) return 0;
for (int i=1;i<=n;i++) scanf("%lld%lld%lld",&a[i],&b[i],&c[i]);
int now=1;
for (ll j=1;j<=n;j++){
ll low =(-1)*(b[j]/(2*a[j]));
if (low<=0) low=1;
for (ll i=low;i<=low+m;i++){
ll anss=a[j]*pow(i,2)+b[j]*i+c[j];
if (q.empty()||q.size()<m) q.push(anss);
if (!q.empty()&&q.size()==m){
if (q.top()>=anss){
q.pop();
q.push(anss);
}
else break;
}
}
}
ll mm=m;
while(!q.empty()&&mm){
ans[mm]=q.top();
q.pop();
mm--;
}
for (ll i=1;i<=m;i++) printf("%lld ",ans[i]);
}