P1908树状数组逆序对树状数组如何高效处理逆序对问题?

2026-04-16 23:172阅读0评论SEO资讯
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计245个文字,预计阅读时间需要1分钟。

P1908树状数组逆序对树状数组如何高效处理逆序对问题?

伪原创可以改写为:模仿创新。以下是改写后的开头内容:

模仿创新是一种常见的创新方式,它通过对现有成果的借鉴和改造,创造出新的产品或服务。这种方式在科技、文化、艺术等领域都有广泛应用。

P1908树状数组逆序对树状数组如何高效处理逆序对问题?

#include<bits/stdc++.h> using namespace std; const int maxn=5e5+10; #define ll long long int a[maxn],b[maxn]; ll c[maxn]; int n; ll ask(int x) { ll ans=0; for(; x; x-=x&-x) ans+=c[x]; return ans; } void add(int x,int y) { for(; x<=n; x+=x&-x) c[x]+=y; } int main() { scanf("%d",&n); for(int i=1; i<=n; i++) { scanf("%d",&a[i]); b[i]=a[i]; } sort(b+1,b+1+n); int cnt=unique(b+1,b+1+n)-b-1; ll ans=0; for(int i=1;i<=n;i++) a[i]=lower_bound(b+1,b+1+cnt,a[i])-b; for(int i=n; i>=1; i--) { ans=ans+ask(a[i]-1); add(a[i],1); } printf("%lld",ans); }

本文共计245个文字,预计阅读时间需要1分钟。

P1908树状数组逆序对树状数组如何高效处理逆序对问题?

伪原创可以改写为:模仿创新。以下是改写后的开头内容:

模仿创新是一种常见的创新方式,它通过对现有成果的借鉴和改造,创造出新的产品或服务。这种方式在科技、文化、艺术等领域都有广泛应用。

P1908树状数组逆序对树状数组如何高效处理逆序对问题?

#include<bits/stdc++.h> using namespace std; const int maxn=5e5+10; #define ll long long int a[maxn],b[maxn]; ll c[maxn]; int n; ll ask(int x) { ll ans=0; for(; x; x-=x&-x) ans+=c[x]; return ans; } void add(int x,int y) { for(; x<=n; x+=x&-x) c[x]+=y; } int main() { scanf("%d",&n); for(int i=1; i<=n; i++) { scanf("%d",&a[i]); b[i]=a[i]; } sort(b+1,b+1+n); int cnt=unique(b+1,b+1+n)-b-1; ll ans=0; for(int i=1;i<=n;i++) a[i]=lower_bound(b+1,b+1+cnt,a[i])-b; for(int i=n; i>=1; i--) { ans=ans+ask(a[i]-1); add(a[i],1); } printf("%lld",ans); }