萌新求助
查看原帖
萌新求助
153588
dChengx楼主2020/11/13 11:28

刚学OI一秒的萌新有一个问题 下面是我的代码

#include<bits/stdc++.h>
#define N 200005
#define mp make_pair
using namespace std;
typedef long long ll;
int n,b[N],c[N],now,ans;
struct node{
	int id,A;
}k[N];
priority_queue<pair<int,int> > q;
bool vis[N];

bool cmp(node x,node y){return x.A<y.A;}

int main(){
	freopen("self.out","w",stdout);
	scanf("%d",&n);
	for(int i=1;i<=n+1;i++)scanf("%d",&k[i].A),k[i].id=i;
	for(int i=1;i<=n;i++)scanf("%d",&b[i]); 
	sort(k+1,k+n+2,cmp);
	sort(b+1,b+n+1);
	for(int i=1;i<=n;i++)
	    q.push(mp(max(k[i].A-b[i],0),i));
	c[k[n+1].id]=q.top().first;
	for(int i=n;i;i--){
		vis[i]=1;
//		while(!q.empty()&&vis[q.top().second])q.pop();
		q.push(mp(max(k[i+1].A-b[i],0),i));
		c[k[i].id]=q.top().first;
	}
	for(int i=1;i<=n+1;i++)printf("%d ",c[i]);
	return 0;
}

优先队列维护最大值做法

//		while(!q.empty()&&vis[q.top().second])q.pop();

为什么不要弹出,把这句加上去就WA了,就是判断这位之前有没有和其他位减过,如果减过就弹出。因为对于每一个BiB_{i}只能和一个AiA_{i}相减……

求助

2020/11/13 11:28
加载中...