题意:~
思路:
#include <bits/stdc++.h>
using namespace std;
typedef long long LL;
typedef pair<int, int> PI;
#define lson l, m, rt<<1
#define rson m+1, r, rt<<1|1
const int MAXN = 200010;
int sum[MAXN << 2];
int a[MAXN], b[MAXN], c[MAXN], id[MAXN];
int n;
inline void pushup(int rt)
{
sum[rt] = sum[rt << 1] + sum[rt << 1 | 1];
}
void build(int l, int r, int rt)
{
if(l == r)
{
sum[rt] = 0;
return;
}
int m = (l + r) >> 1;
build(lson);
build(rson);
pushup(rt);
}
void modify(int p,int x, int l, int r, int rt)
{
if(l == r)
{
sum[rt] ++;
return;
}
int m = (l + r) >> 1;
if(p <= m) modify(p, x, lson);
else modify(p, x, rson);
pushup(rt);
}
int query(int L, int R, int l, int r, int rt)
{
if(L <= l && r <= R) return sum[rt];
int m = (l + r) >> 1;
int res = 0;
if(L <= m) res += query(L, R, lson);
if(R > m) res += query(L, R, rson);
return res;
}
LL solve(int x[], int y[])
{
for(int i = 0; i < n; ++i) id[x[i]] = i;
build(0, n - 1, 1);
LL ans = 0;
for(int i = 0; i < n; ++i)
{
ans += query(id[y[i]], n - 1, 0, n - 1, 1);
modify(id[y[i]], 1, 0, n - 1, 1);
}
return ans;
}
int main()
{
ios::sync_with_stdio(false);
cin.tie(0);
while(cin >> n)
{
for(int i = 0; i < n; ++i) cin >> a[i];
for(int i = 0; i < n; ++i) cin >> b[i];
for(int i = 0; i < n; ++i) cin >> c[i];
LL ans = solve(a, b) + solve(b, c) + solve(c, a);
ans = (LL)n * (n - 1) / 2 - ans / 2;
cout << ans << endl;
}
return 0;
}
- 版权声明:本文基于《知识共享署名-相同方式共享 3.0 中国大陆许可协议》发布,转载请遵循本协议
- 文章链接:http://www.carlstedt.cn/archives/1420 (转载时请注明本文出处及文章链接)
相关文章
- 本文无相关文章
- 本文无相关文章


发表评论
快来吐槽一下吧!