如题。怎么还卡空间这么恶心!
求大佬帮忙,球球求求求了
#include<bits/stdc++.h>
using namespace std;
const int N=2e5+10;
int n,cnt,tot;
long long ans,a,b;
int rt[N];
struct ccf
{
int l,r;
long long x;
}f[N<<6];
void build(int &k,int l,int r,int x)
{
k=++tot;
if(l==r)return f[k].x++,void();
int mid=(l+r)/2;
if(x<=mid)build(f[k].l,l,mid,x);
else build(f[k].r,mid+1,r,x);
f[k].x=f[f[k].l].x+f[f[k].r].x;
}
int merge(int x,int y,int l,int r)
{
if(!x)return y;
if(!y)return x;
if(l==r)return f[x].x+=f[y].x,x;
int mid=(l+r)/2;
a+=f[f[x].l].x*f[f[y].r].x,b+=f[f[x].r].x*f[f[y].l].x;
f[x].l=merge(f[x].l,f[y].l,l,mid);
f[x].r=merge(f[x].r,f[y].r,mid+1,r);
f[x].x=f[f[x].l].x+f[f[x].r].x;
return x;
}
int dfs()
{
int k;
cin>>k;
if(k==0)
{
int l=dfs(),r=dfs();
a=b=0;
rt[l]=merge(rt[l],rt[r],1,n);
ans+=min(a,b);
return l;
}
else
{
build(rt[++cnt],1,n,k);
return cnt;
}
}
signed main()
{
cin>>n;
dfs();
cout<<ans;
return 0;
}