Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <bits/stdc++.h>
- #define N 70005
- using namespace std;
- ifstream fin("ijk.in");
- ofstream fout("ijk.out");
- int n,m=1,aib[N],a[N],v[N],st[N],dr[N];
- long long sol;
- unordered_map<int , int >M;
- int lowestBit(int x){return (x&-x);}
- void Update(int poz, int add)
- {
- for(int i=poz;i<=m;i+=lowestBit(i))
- aib[i]+=add;
- }
- int Query(int poz)
- {
- int sum=0;
- for(int i=poz;i>=1;i-=lowestBit(i))
- sum+=aib[i];
- return sum;
- }
- int main()
- {
- fin>>n;
- for(int i=1;i<=n;i++)fin>>a[i],v[i]=a[i];
- sort(v+1,v+n+1);
- for(int i=1;i<=n;i++)
- {
- M[v[i]]=m;
- if(v[i]!=v[i+1])m++;
- }
- m--;
- for(int i=1;i<=n;i++)a[i]=M[a[i]];
- for(int i=n;i>=1;i--)
- {
- Update(a[i],1);
- dr[i]=Query(m)-Query(a[i]);
- }
- for(int i=1;i<=n;i++) aib[i]=0;
- for(int i=1;i<=n;i++)
- {
- Update(a[i],1);
- st[i]=Query(m)-Query(a[i]);
- }
- for(int i=1;i<=n;i++)sol+=(dr[i]*st[i]);
- fout<<sol;
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement