尽量满足当前顾客的要求,如果不能满足就更新当前的库存
找前面一个需求量最大的顾客给他踢掉换成当前顾客
#include<bits/stdc++.h>
#define pa pair<int,int>
using namespace std;
int sc()
{
int i=0; char c=getchar();
while(c>'9'||c<'0')c=getchar();
while(c>='0'&&c<='9')i=i*10+c-'0',c=getchar();
return i;
}
priority_queue<pa,vector<pa> >q;
int a[255555],b[255555],c[255555],n,ans;
long long sum;
int main()
{
n=sc();
for(int i=1;i<=n;i++)a[i]=sc();
for(int i=1;i<=n;i++)b[i]=sc();
for(int i=1;i<=n;i++)
{
sum+=a[i];
if(sum>=b[i])
{
ans++;
sum-=b[i];
q.push(make_pair(b[i],i));
}
else if(!q.empty()&&q.top().first>b[i])
{
sum+=q.top().first-b[i];
q.pop();
q.push(make_pair(b[i],i));
}
}
while(!q.empty())
c[q.top().second]=1,q.pop();
printf("%d\n",ans);
for(int i=1;i<=n;i++)
if(c[i])printf("%d ",i);
return 0;
}