不会树状数组可用线段树,但要离散化
2025-10-06 14:45:26
发布于:广东
1阅读
0回复
0点赞
#include<bits/stdc++.h>
#define int long long
using namespace std;
int n,a[500005],b[500005],tree[2000005],sum;
unordered_map<int,int> f;
inline void update(int l,int r,int q,int id)
{
if (l==r && l==q)
{
tree[id]++;
return;
}
int mid=(l+r)>>1;
if (q<=mid) update(l,mid,q,id<<1);
if (q>mid) update(mid+1,r,q,id<<1|1);
tree[id]=tree[id<<1]+tree[id<<1|1];
}
inline int query(int l,int r,int ql,int qr,int id)
{
if (ql<=l && qr>=r)
return tree[id];
int mid=(l+r)>>1,s=0;
if (ql<=mid) s+=query(l,mid,ql,qr,id<<1);
if (qr>mid) s+=query(mid+1,r,ql,qr,id<<1|1);
return s;
}
signed main()
{
cin >> n;
for (int i=1;i<=n;i++)
{
cin >> a[i];
b[i]=a[i];
}
sort(b+1,b+n+1);
int m=unique(b+1,b+n+1)-b-1;
for (int i=1;i<=m;i++) f[b[i]]=i;
for (int i=1;i<=n;i++)
{
a[i]=f[a[i]];
update(1,n,a[i],1);
sum+=query(1,n,a[i]+1,m,1);
}
cout << sum;
return 0;
}
这里空空如也





有帮助,赞一个