func_code_string: #include <bits/stdc++.h>   using namespace std;   vector<int> o, p, e;   int n, i, j, x;   int a[200000], b[200000];   struct T {     int i;   } t;   bool operator<(T t1, T t2) {     if ((t2.i - x - a[b[t2.i]] + 2 * n) % n !=         (t1.i - x - a[b[t1.i]] + 2 * n) % n)       return (t2.i - x - a[b[t2.i]] + 2 * n) % n <              (t1.i - x - a[b[t1.i]] + 2 * n) % n;     return t1.i < t2.i;   }   priority_queue<T> qp;   set<T> qo;   set<T>::iterator it;   int main() {     scanf( %d , &n);     for (i = 0; i < n; i++) {       scanf( %d , &x);       a[x - 1] = i;     }     for (i = 0; i < n; i++) {       scanf( %d , &b[i]);       b[i]--;     }     x = 0;     for (i = 0; i < n; i++)       if (a[b[i]] < i) {         t.i = i;         qp.push(t);       } else if (a[b[i]] > i) {         t.i = i;         qo.insert(t);       } else         e.push_back(i);     for (i = 0; i < n; i++) {       x = 1999999999;       if (e.size())         printf( 0 n );       else {         if (qp.size()) {           t = qp.top();           x = min(x, (t.i - i + n) % n - a[b[t.i]]);         }         if (qo.size()) {           it = qo.begin();           j = it->i;           x = min(x, a[b[j]] - (j - i + n) % n);         }         printf( %d n , x);       }       x = i + 1;       for (j = 0; j < e.size(); j++) {         if (e[j] != i) {           t.i = e[j];           qo.insert(t);         } else {           t.i = e[j];           qp.push(t);         }       }       e.clear();       while (!qp.empty()) {         t = qp.top();         if ((t.i - i - 1 + n) % n == a[b[t.i]]) {           e.push_back(t.i);           qp.pop();         } else           break;       }       t.i = i;       it = qo.find(t);       if (it != qo.end()) {         qo.erase(t);         if (a[b[i]] == n - 1)           e.push_back(i);         else {           t.i = i;           qp.push(t);         }       }     }     return 0;   }   