http://tyvj.cn/p/3301
纯水题,放进小根堆,x枚举到100可以AC。
#include<cstdio>
#include<cstring>
using namespace std;
int heap[1000005];
int hsize = 0;
int put(int x)
{
hsize++;
heap[hsize] = x;
int now, next = hsize;
while (next > 0)
{
now = next;
if (heap[now/2]>heap[now])
{
int t = heap[now/2];
heap[now/2] = heap[now];
heap[now] = t;
next = now / 2;
} else break;
}
}
int get()
{
int ret = heap[1];
heap[1] = heap[hsize--];
int now, next = 1;
while (next * 2 <= hsize)
{
now = next*2;
if (now + 1<hsize&&heap[now + 1]<heap[now])
now++;
if (heap[now/2]>heap[now])
{
int t = heap[now/2];
heap[now/2] = heap[now];
heap[now] = t;
next = now;
} else break;
}
return ret;
}
int main ()
{
int n,m;
scanf("%d%d", &n, &m);
for (int i=1;i<=n;i++)
{
int ai, bi, ci;
scanf("%d%d%d", &ai, &bi, &ci);
for (int x=1;x<=100;x++)
put(ai*x*x+bi*x+ci);
}
for (int i=1;i<=m;i++)
{
int a = get();
printf("%d ", a);
}
return 0;
}