|
1 | | -// ---------------------------------------------------------------------- |
2 | | -// ██████╗ ██████╗ ██████╗ ███████╗ |
3 | | -// ██╔════╝██╔═══██╗██╔══██╗██╔════╝ |
4 | | -// ██║ ██║ ██║██║ ██║█████╗ |
5 | | -// ██║ ██║ ██║██║ ██║██╔══╝ |
6 | | -// ╚██████╗╚██████╔╝██████╔╝███████╗ |
7 | | -// ╚═════╝ ╚═════╝ ╚═════╝ ╚══════╝ |
8 | | -// ---------------------------------------------------------------------- |
9 | | -// Prashant'S CP TEMPLATE |
10 | | -// "Think. Code. Conquer." |
11 | | -// ---------------------------------------------------------------------- |
12 | | -#include<iostream> |
13 | | -#include<vector> |
14 | | -#include<algorithm> |
15 | | -#include<unordered_map> |
16 | | -#include<bit> |
17 | | -#include<map> |
18 | | -#include<set> |
19 | | -#include<queue> |
20 | | -#include<stack> |
21 | | -#include<string> |
22 | | -#include<iterator> |
23 | | -#include<cmath> |
24 | | -#include<iomanip> |
25 | | -#include<climits> |
26 | | -#include<cstdint> |
27 | | -#include<cstdlib> |
28 | | -using namespace std; |
29 | | -#define ll long long |
30 | | -#define int long long |
31 | | -#define MOD 1000000007 |
32 | | -#define pb push_back |
33 | | -#define all(v) v.begin(),v.end() |
34 | | -#define rall(v) v.rbegin(),v.rend() |
35 | | -#define sz(x) (int)(x).size() |
36 | | -#define srt(v) sort(v.begin(),v.end()) |
37 | | -#define Rsrt(v) sort(v.begin(),v.end(),greater<int>()) |
38 | | -#define endl "\n" |
39 | | -#define F first |
40 | | -#define S second |
41 | | -#define vi vector<int> |
42 | | -#define vc vector<char> |
43 | | -#define vb vector<bool> |
44 | | -#define vvi vector<vector<int>> |
45 | | -#define pii pair<int,int> |
46 | | -#define umap unordered_map |
47 | | -#define mii map<int,int> |
48 | | -#define fr(i,a,b) for(int i=a;i<b;i++) |
49 | | -#define frr(i,a,b) for(int i=a;i>b;i--) |
50 | | -#define mxe(v) *max_element(v.begin(),v.end()) |
51 | | -#define mne(v) *min_element(v.begin(),v.end()) |
52 | | -class FenwickTree{ |
53 | | - public: |
54 | | - vi tree; |
55 | | - int n; |
56 | | - FenwickTree(int size){ |
57 | | - n=size; |
58 | | - tree.assign(n+1,0); |
59 | | - } |
60 | | - void update(int idx,int val){ |
61 | | - while(idx<=n){ |
62 | | - tree[idx]+=val; |
63 | | - idx+=idx&(-idx); |
64 | | - } |
65 | | - } |
66 | | - int query(int idx){ |
67 | | - int sum=0; |
68 | | - while(idx>0){ |
69 | | - sum+=tree[idx]; |
70 | | - idx-=idx&(-idx); |
71 | | - } |
72 | | - return sum; |
73 | | - } |
74 | | -}; |
75 | | -signed main(){ |
76 | | - ios_base::sync_with_stdio(false); |
77 | | - cin.tie(NULL); |
78 | | - int n; |
79 | | - cin>>n; |
80 | | - vi a(n); |
81 | | - fr(i,0,n) cin>>a[i]; |
82 | | - vi sorted_a=a; |
83 | | - srt(sorted_a); |
84 | | - map<int,int> compress; |
85 | | - fr(i,0,n){ |
86 | | - compress[sorted_a[i]]=i+1; |
87 | | - } |
88 | | - vi compressed(n); |
89 | | - fr(i,0,n){ |
90 | | - compressed[i]=compress[a[i]]; |
91 | | - } |
92 | | - vi leftGreater(n); |
93 | | - FenwickTree ft1(n); |
94 | | - fr(i,0,n){ |
95 | | - leftGreater[i]=i-ft1.query(compressed[i]); |
96 | | - ft1.update(compressed[i],1); |
97 | | - } |
98 | | - vi rightSmaller(n); |
99 | | - FenwickTree ft2(n); |
100 | | - frr(i,n-1,-1){ |
101 | | - rightSmaller[i]=ft2.query(compressed[i]-1); |
102 | | - ft2.update(compressed[i],1); |
103 | | - } |
104 | | - int answer=0; |
105 | | - fr(i,0,n){ |
106 | | - answer+=leftGreater[i]*rightSmaller[i]; |
107 | | - } |
108 | | - cout<<answer<<endl; |
109 | | - return 0; |
110 | | -} |
| 1 | + |
0 commit comments