1 条题解
-
0
C++ :
#include<iostream> #include<cstdio> #include<algorithm> #include<cstring> using namespace std; //求上突。 long long n,a[50001]; long long c[50001]; long long l[50001],r[50001]; long long num; int lowbit(int x) { return x&(-x); } void add(int pos,int x) { for(int i=pos; i<=50000; i+=lowbit(i)) { c[i]+=x; } } long long sum(int pos) { long long tot=0; for(int i=pos; i>0; i-=lowbit(i)) { tot+=c[i]; } return tot; } void init() { cin>>n; for(int i=1; i<=n; i++) { cin>>a[i]; } } void work() { for(int i=1; i<=n; i++) { l[i]=sum(a[i]); add(a[i]+1,1); } memset(c,0,sizeof(c)); for(int i=n; i>=1; i--) { r[i]=sum(a[i]); add(a[i]+1,1); } for(int i=1; i<=n; i++) { num+=l[i]*r[i]; } cout<<num; } int main() { init(); work(); }
- 1
信息
- ID
- 998
- 时间
- 1000ms
- 内存
- 128MiB
- 难度
- (无)
- 标签
- 递交数
- 0
- 已通过
- 0
- 上传者