1 条题解
-
0
#include<bits/stdc++.h> using namespace std; struct Bitree{ long long bi[1000010],ibi[1000010]; long long n; long long lowbit(long long x){ return (x & -x); } void init(long long size){ n = size; for(long long i = 0; i <= n; i++){ bi[i] = 0; ibi[i]=0; } } void add(long long pos,long long val){ long long vb=val; long long vib=val*pos; while(pos <= n){ bi[pos] += vb; ibi[pos] += vib; pos += lowbit(pos); } } long long queryb(long long pos){ long long ans = 0; while(pos > 0){ ans += bi[pos]; pos -= lowbit(pos); } return ans; } long long queryib(long long pos){ long long ans = 0; while(pos > 0){ ans += ibi[pos]; pos -= lowbit(pos); } return ans; } long long query(long long pos){ return queryb(pos) *(pos+1) -queryib(pos); } long long query(long long l,long long r){ return query(r)-query(l-1); } }; struct thing{ long long a; long long i; }; bool cmp(thing x,thing y){ if(x.a==y.a){ return x.i<y.i; } return x.a<y.a; } Bitree bitree; thing a[500005]; int main(){ ios::sync_with_stdio(0); cin.tie(); cout.tie(); long long n; cin>>n; bitree.init(n); for(long long i=1;i<=n;i++){ cin>>a[i].a; a[i].i=i; } sort(a+1,a+n+1,cmp); long long ans=0; for(long long i=1;i<=n;++i){ bitree.add(a[i].i,1); ans+=i-bitree.queryb(a[i].i); } cout<<ans; return 0; }
信息
- ID
- 2399
- 时间
- 30ms
- 内存
- 512MiB
- 难度
- 6
- 标签
- 递交数
- 24
- 已通过
- 10
- 上传者