Skip to content

Commit 951a7c9

Browse files
authored
Merge pull request #536 from prashant2007-wq/main
Update contributers.md
2 parents 3ea705b + 298efe6 commit 951a7c9

1 file changed

Lines changed: 110 additions & 0 deletions

File tree

Lines changed: 110 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,110 @@
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+
}

0 commit comments

Comments
 (0)