求调,100unaccept,sub#3没过
查看原帖
求调,100unaccept,sub#3没过
531650
emmc楼主2024/8/2 22:04
#include <bits/stdc++.h>
using namespace std;
const int N=2*1e6;
int n;
struct node  
{  
    int v,p,p2;  
    friend bool operator < (node a, node b)  
    {  
        return a.v<b.v;
    }  
}; 
priority_queue<node>q;
node a[N],b[N];
bool cmp(node a,node b){
	return (a.v+a.p*2)>(b.v+b.p*2);
}
int main(){
	cin>>n;
	if(n==0){
		cout<<0<<endl;
		return 0;
	}
	for(int i=1;i<=n;i++){
		cin>>a[i].p;
	}
	for(int i=1;i<=n;i++){
		cin>>a[i].v;
		a[i].p2=i;
		b[i]=a[i];
	}
	sort(b+1,b+1+n,cmp);
	int l=1,ans=0,d=0,ll=0;
	for(int i=1;i<=n;i++){
		int t1=0,t2=0,t3=0;
		if(q.empty()){
			t1=0;
		}
		else{
			t1=q.top().v;
			//cout<<q.top().p<<endl;
		}
		if(l!=n+1){
			t2=b[l].v+(b[l].p-d)*2;
//			d=b[l].p;
//			l++;
//			while(l<=n and b[l].p<=d){
//				q.push(b[l]);
//				l++;
//			}
		}
		if(t1>t2){
			t3=t1;
			q.pop();
		}
		else{
			t3=t2;
			d=b[l].p;
			int lll=ll;
			ll=max(b[l].p2,ll)+1;
			for(int i=lll;i<ll-1;i++){
				q.push(a[i]);
			}
			l++;
			while(l<=n and b[l].p<=d){
				//q.push(b[l]);
				l++;
			}
		}
		ans+=t3;
		cout<<ans<<endl;
	}
}

#orz

2024/8/2 22:04
加载中...