还是不明白为什么过不了
//m秒内,每一秒被切断的蚯蚓被切断前的长度(有m个数)
//m秒后,所有蚯蚓的长度(有n+m个数)
//手写队列
#include<iostream>
#include<cstdio>
#include<queue>
#include<algorithm>
using namespace std;
typedef long long ll;
const ll N=7000005;
priority_queue<ll> que;
ll h1,h2,h3,t1,t2,t3;
ll n,m,q,t;
ll u,v;
//共有n只蚯蚓,救兵还需要m秒才能到来,其余蚯蚓的长度都会增加q, p=u/v
ll q1[N];//初始时n只蚯蚓的长度
ll q2[N],q3[N];
bool cmp(ll x,ll y)
{
return x>y;
}
bool flag=false;
int main()
{
scanf("%lld%lld%lld%lld%lld%lld",&n,&m,&q,&u,&v,&t);
ll i;
ll x=-1,y=-1,z=-1,maxx;
for(i=1;i<=n;i++)
scanf("%lld",&q1[i]);
sort(q1+1,q1+n+1,cmp);
h1=1;
t1=n+1;
h2=t2=h3=t3=1;
for(i=1;i<=m;i++)
{
x=y=z=-1;
flag=false;
if(t1>h1)
x=q1[h1];
if(t2>h2)
y=q2[h2];
if(t3>h3)
z=q3[h3];
maxx=max(x,max(y,z));
if(x==maxx)
{
if(i%t==0)
printf("%lld ",x+q*(i-1));
h1++;
flag=true;
q2[t2]=((x+q*(i-1))*u/v-q*i);
t2++;
q3[t3]=((x+q*(i-1))-(x+q*(i-1))*u/v-q*i);
t3++;
}
if(y==maxx&&flag==false)
{
if(i%t==0)
printf("%lld ",y+q*(i-1));
h2++;
flag=true;
q2[t2]=((y+q*(i-1))*u/v-q*i);
t2++;
q3[t3]=((y+q*(i-1))-(y+q*(i-1))*u/v-q*i);
t3++;
}
if(z==maxx&&flag==false)
{
if(i%t==0)
printf("%lld ",z+q*(i-1));
h3++;
q2[t2]=((z+q*(i-1))*u/v-q*i);
t2++;
q3[t3]=((z+q*(i-1))-(z+q*(i-1))*u/v-q*i);
t3++;
}
}
printf("\n");
i=0;
while(t1>h1)
{
que.push(q1[h1]);
h1++;
}
while(t2>h2)
{
que.push(q2[h2]);
h2++;
}
while(t3>h3)
{
que.push(q3[h3]);
h3++;
}
for(i=1;i<=n+m;i++)
{
if(i%t==0)
printf("%lld ",que.top()+q*m);
que.pop();
}
return 0;
}