Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include<bits/stdc++.h>
- #define int long long
- using namespace std;
- typedef long long ll;
- const int N = 200000 + 10;
- void read(ll &x){
- char c;
- do { c = getchar(); } while (!isdigit(c));
- x = c - '0';
- while (isdigit(c = getchar())) x = x * 10 + c - '0';
- }
- ll n;
- int pos[N][4];
- vector<pair<int, int > > V;
- int val[N];
- int get(int x){
- int ans = 0;
- for (; x > 0; x -= x & -x) ans += val[x];
- return ans;
- }
- void add(int x){ for (; x <= n; x += x & -x) val[x] ++; }
- ll get(int id1, int id2){
- memset(val, 0, sizeof val);
- V.clear();
- for (int i = 1; i <= n; ++i)
- V.push_back({pos[i][id1], pos[i][id2]});
- sort(V.begin(), V.end());
- ll ans = 0;
- for (int i = 0; i < n; ++i){
- ans += 1LL * get(V[i].second);
- add(V[i].second);
- }
- return ans;
- }
- main(){
- read(n);
- for (int x = 1; x <= 3; ++x)
- for (int i = 1; i <= n; ++i){
- ll va; read(va);
- pos[va][x] = i;
- }
- long long ans = get(1, 2) + get(2, 3) + get(1, 3);
- ans -= n * (n - 1) / 2;
- ans /= 2;
- cout << ans << '\n';
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement