1 条题解
-
0
#include <bits/stdc++.h> using ll = long long; #define lowbit(x) (-x) & x using namespace std; const ll N = 2e5 + 9; ll a[N], t[N]; ll n; vector<ll> X; void update(ll k, ll x) { for (int i = k; i <= n; i += lowbit(i)) { t[i] += x; } } ll bin(ll x) { return (lower_bound(X.begin(), X.end(), x) - X.begin() + 1); } ll getsum(ll k) { ll res = 0; for (int i = k; i; i -= lowbit(i)) { res += t[i]; } return res; } signed main() { cin >> n; for (int i = 1; i <= n; ++i) { cin >> a[i]; X.push_back(a[i]); } sort(X.begin(), X.end()); X.erase(unique(X.begin(), X.end()), X.end()); ll ans = 0; for (int i = 1; i <= n; i++) { ans += getsum(X.size()) - getsum(bin(a[i])); update(bin(a[i]), 1); } cout << ans << '\n'; return 0; }
#include<bits/stdc++.h> #define int long long #define INF 0x3f3f3f3f #define endl '\n' using namespace std; const int N=1e6+9; int n,a[N],temp[N]; inline int ms(int a[],int l,int r){ if(l>=r) return 0; int mid=(l+r)>>1; int res=ms(a,l,mid)+ms(a,mid+1,r); int k=0,i=l,j=mid+1; while(i<=mid&&j<=r){ if(a[i]<=a[j]) temp[k++]=a[i++]; else{ temp[k++]=a[j++]; res+=mid-i+1; } } while(i<=mid) temp[k++]=a[i++]; while(j<=r) temp[k++]=a[j++]; for(int i=l,j=0;i<=r;i++,j++) a[i]=temp[j]; return res; } inline void solve(){ cin >> n; for(int i=0;i<n;++i) cin >> a[i]; cout << ms(a,0,n-1) << endl; } signed main(){ ios::sync_with_stdio(0),cin.tie(0),cout.tie(0); int _ = 1; //int _; cin >> _; while(_--) solve(); return 0; }
- 1
信息
- ID
- 112
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 6
- 标签
- 递交数
- 44
- 已通过
- 13
- 上传者