rt,这题的多倍经验都过了啊,怎么这个过不了
#include<bits/stdc++.h>
using namespace std;
const int N=2e5+5;
#define ll long long
ll inline read()
{
ll num=0,f=1;
char ch=getchar();
while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}
while(ch>='0'&&ch<='9'){num=(num<<3)+(num<<1)+(ch^48);ch=getchar();}
return num*f;
}
int n,m,pre[N],nxt[N];
ll a[N],sum;bool vis[N];
struct node{int id;ll w;bool operator <(const node &rhs)const{return w<rhs.w;}};
void lnk(int x,int y){pre[y]=x;nxt[x]=y;}
priority_queue<node>q;
int main(){
n=read();m=(n+1)/2;
for(int i=1;i<=n;i++)q.push({i,a[i]=read()});
for(int i=1;i<=n;i++)lnk(i-1,i),lnk(i,i+1);
while(m--)
{
while(vis[q.top().id])q.pop();
node d=q.top();q.pop();
int l=pre[d.id],r=nxt[d.id];
lnk(pre[l],d.id);lnk(d.id,nxt[r]);vis[l]=vis[r]=1;
sum+=d.w;q.push({d.id,a[d.id]=a[l]+a[r]-d.w});
printf("%lld\n",sum);
}
return 0;
}