1 solutions
-
0
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