求dalao帮助

P1631 序列合并

代码 ``` #include<iostream> #include<cstdio> #include<cstring> #include<cmath> #include<algorithm> using namespace std; int n=1,T,Heap[1000010],a[100010],b[100010],num[100010],c[100010]; void Insert(int value,int x) { Heap[++T]=value; num[T]=x; int loc=T; while(Heap[loc]<Heap[loc>>1] && loc>1) { int t=Heap[loc>>1]; Heap[loc>>1]=Heap[loc]; Heap[loc]=t; t=num[loc>>1]; num[loc>>1]=num[loc]; num[loc]=t; loc>>=1; } } void Delete() { Heap[1]=Heap[T]; num[1]=num[T--]; int loc=1; while((loc<<1)<=T) { int nloc=(loc<<1); if(nloc+1<=T && Heap[nloc]>Heap[nloc+1])nloc++; if(Heap[loc]>Heap[nloc]) { int t=Heap[nloc]; Heap[nloc]=Heap[loc]; Heap[loc]=t; t=num[nloc]; num[nloc]=num[loc]; num[loc]=t; } else break; loc=nloc; } } int main() { // while(scanf("%d",&a[n])!=EOF)n++; // n/=2; // for(int i=1;i<=n;i++)b[i]=a[i+n]; scanf("%d",&n); for(int i=1;i<=n;i++)scanf("%d",&a[i]); for(int i=1;i<=n;i++)scanf("%d",&b[i]); for(int i=1;i<=n;i++)Insert(a[i]+b[1],i),c[i]=1; for(int i=1;i<=n;i++) { int t=num[1]; printf("%d ",Heap[1]); Delete(); Insert(b[++c[t]]+a[t],t); } return 0; } ```
by _szh_ @ 2019-06-03 20:30:37


|