24pts
查看原帖
24pts
1268398
BeTheNorthStar楼主2024/10/14 22:46
#include<bits/stdc++.h>
#define int long long
using namespace std;
const int maxn=200005;
int T,n,p[maxn],s[maxn],pre[maxn],nxt[maxn],ans[maxn],hep_size;
struct BNS{
	int x,y,Tim;
	bool operator<(const BNS &B)const{return Tim<B.Tim;}
}hep[maxn];
int read(){
	int ret=0,f=1;char ch=getchar();
	while(!isdigit(ch)) f^=!(ch^'-'),ch=getchar();
	while( isdigit(ch)) ret=(ret<<3)+(ret<<1)+(ch&15),ch=getchar();
	return ret*(f?1:-1);
}
int CALC(int x,int y){return ((p[y]-p[x]-1)/(s[x]+s[y])+1)*2-x%2;}
void del(int x,int y){nxt[pre[x]]=nxt[x],pre[nxt[x]]=pre[x];}
void put(int x,int y,int Tim){
	hep[++hep_size]=(BNS){x,y,Tim};int son=hep_size;
	while(son>1&&hep[son]<hep[son>>1]) swap(hep[son],hep[son>>1]),son>>=1;
}
BNS get(){
	BNS now=hep[1];int fa=1,son;hep[1]=hep[hep_size--];
	while((fa<<1)<=hep_size){
		if((fa<<1|1)>hep_size||hep[fa<<1]<hep[fa<<1|1]) son=fa<<1;else son=fa<<1|1;
		if(hep[son]<hep[fa]) swap(hep[son],hep[fa]),fa=son;else break;
	}return now;
}
signed main(){
//	freopen("quantum.in","r",stdin);
//	freopen("quantum.out","w",stdout);
	T=read();
	while(T--){
		n=read(),hep_size=0,memset(ans,0,sizeof ans);
		for(int i=1;i<=n;i++) pre[i]=i-1,nxt[i]=i+1;
		for(int i=1;i<=n;i++) p[i]=read();
		for(int i=1;i<=n;i++) s[i]=read();
		for(int i=1;i< n;i++) put(i,i+1,CALC(i,i+1));
		while(hep_size){
			BNS now=get();
			if(ans[now.x]||ans[now.y]) continue;
			ans[now.x]=ans[now.y]=now.Tim;
			if(1<=pre[now.x]&&nxt[now.y]<=n) put(pre[now.x],nxt[now.y],CALC(pre[now.x],nxt[now.y]));
			del(now.x,now.y);
		}for(int i=1;i<=n;i++) if(i==n) printf("%lld\n",ans[i]);else printf("%lld ",ans[i]);
	}
	return 0;
}
2024/10/14 22:46
加载中...