这题的题解大部分都是用sort和数组来模拟queue和priority_queue
问一下能不能直接用queue和priority_queue
写了一份代码,错的,样例都过不去55555
求查错
#include<bits/stdc++.h>
using namespace std;
int n,m,u,v,q,t,sum;
double p;
priority_queue<int>pq,ans;
queue<int>cut[2];
int main()
{
scanf("%d%d%d%d%d%d",&n,&m,&q,&u,&v,&t);
p=double(u/v);
for(int i=1,now;i<=n;i++)
{
scanf("%d",&now);
pq.push(now);
}
for(int i=1,top;i<=m;i++)
{
if(pq.empty())
{
if(cut[0].front()>cut[1].front())
{
top=cut[0].front();
cut[0].pop();
}
else
{
top=cut[1].front();
cut[1].pop();
}
}
else if(pq.top()>=cut[0].front()&&pq.top()>=cut[1].front())
{
top=pq.top();
pq.pop();
}
else if(cut[0].front()>=cut[1].front()&&pq.top()<=cut[0].front())
{
top=cut[0].front();
cut[0].pop();
}
else
{
top=cut[1].front();
cut[1].pop();
}
//cout<<top<<' ';
top+=sum;
int c1=floor(p*double(top)),c2=top-c1;
sum+=q;
c1-=sum;
c2-=sum;
cut[0].push(c1);
cut[1].push(c2);
if(i%t==0)printf("%d ",top);
}
puts("");
while(!pq.empty())
{
ans.push(pq.top());
pq.pop();
}
while(!cut[0].empty())
{
ans.push(cut[0].front());
cut[0].pop();
}
while(!cut[1].empty())
{
ans.push(cut[1].front());
cut[1].pop();
}
for(int i=1;!ans.empty();i++)
{
if(i%t==0)printf("%d ",ans.top()+sum);
ans.pop();
}
puts("");
return 0;
}
/*
3 7 1 1 3 1
3 3 2
*/