Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- https://codeforces.com/gym/101485 G
- #ifndef ONLINE_JUDGE
- #pragma GCC optimize("O0")
- #elif ONLINE_JUDGE
- #pragma GCC optimize("Ofast")
- #pragma GCC target("sse4.2")
- #pragma GCC target("avx2")
- #endif
- #include <bits/stdc++.h>
- #include <x86intrin.h>
- using namespace std;
- const int maxn = 200000;
- alignas(32) int a[maxn];
- alignas(32) int b[maxn];
- alignas(32) int c[maxn];
- alignas(32) int posb[maxn];
- alignas(32) int posc[maxn];
- alignas(32) int specialC[maxn];
- #define PACK_SIZE 128
- int cnt[PACK_SIZE];
- int find1(int pb, int pc, int x) {
- for (int i = 0; i < PACK_SIZE; i++) cnt[i] = 0;
- for (int i = 0; i + PACK_SIZE <= pb; i += PACK_SIZE) {
- for (int j = 0; j < PACK_SIZE; j++) {
- cnt[j] += b[i + j] < x && specialC[i + j] < pc;
- }
- }
- int result = 0;
- for (int i = 0; i < PACK_SIZE; i++) result += cnt[i];
- for (int i = pb / PACK_SIZE * PACK_SIZE; i < pb; i++) result += b[i] < x && specialC[i] < pc;
- return result;
- }
- int main(int argc, char *argv[]) {
- ios::sync_with_stdio(false);
- cin.tie(nullptr);
- int n;
- cin >> n;
- for (int i = 0; i < n; i++) cin >> a[i], a[i]--;
- for (int i = 0; i < n; i++) cin >> b[i], b[i]--;
- for (int i = 0; i < n; i++) cin >> c[i], c[i]--;
- for (int i = 0; i < n; i++) posb[b[i]] = i;
- for (int i = 0; i < n; i++) posc[c[i]] = i;
- for (int i = 0; i < n; i++) b[posb[a[i]]] = i;
- for (int i = 0; i < n; i++) c[posc[a[i]]] = i;
- for (int i = 0; i < n; i++) posb[b[i]] = i;
- for (int i = 0; i < n; i++) posc[c[i]] = i;
- for (int i = 0; i < n; i++) specialC[i] = posc[b[i]];
- long long answer = 0;
- for (int i = 0; i < n; i++) {
- int pb = posb[i];
- int pc = posc[i];
- answer += find1(pb,pc,i);
- }
- cout << answer;
- }
Advertisement
Add Comment
Please, Sign In to add comment