PloadyFree

SIMD easy

Oct 25th, 2019
417
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.22 KB | None | 0 0
  1. https://codeforces.com/gym/101485 G
  2.  
  3. #pragma GCC optimize("Ofast")
  4. #pragma GCC target("avx2")
  5.  
  6. #include <bits/stdc++.h>
  7.  
  8. using namespace std;
  9.  
  10. const int maxn = 1 << 18;
  11. alignas(32) int a[maxn];
  12. alignas(32) int b[maxn];
  13. alignas(32) int c[maxn];
  14. alignas(32) int posb[maxn];
  15. alignas(32) int posc[maxn];
  16. alignas(32) int specialC[maxn];
  17.  
  18. int getCount(int at) {
  19.   int pb = posb[at];
  20.   int pc = posc[at];
  21.   int result = 0;
  22.   for (int i = 0; i < pb; i++)
  23.     result += b[i] < at && specialC[i] < pc;
  24.   return result;
  25. }
  26.  
  27. int main(int argc, char *argv[]) {
  28.   ios::sync_with_stdio(false);
  29.   cin.tie(nullptr);
  30.  
  31.   int n;
  32.   cin >> n;
  33.   for (int i = 0; i < n; i++) cin >> a[i], a[i]--;
  34.   for (int i = 0; i < n; i++) cin >> b[i], b[i]--;
  35.   for (int i = 0; i < n; i++) cin >> c[i], c[i]--;
  36.   for (int i = 0; i < n; i++) posb[b[i]] = i;
  37.   for (int i = 0; i < n; i++) posc[c[i]] = i;
  38.   for (int i = 0; i < n; i++) b[posb[a[i]]] = i;
  39.   for (int i = 0; i < n; i++) c[posc[a[i]]] = i;
  40.   for (int i = 0; i < n; i++) posb[b[i]] = i;
  41.   for (int i = 0; i < n; i++) posc[c[i]] = i;
  42.   for (int i = 0; i < n; i++) specialC[i] = posc[b[i]];
  43.   long long answer = 0;
  44.   for (int i = 0; i < n; i++) answer += getCount(i);
  45.   cout << answer;
  46. }
Advertisement
Add Comment
Please, Sign In to add comment