#include<bits/stdc++.h> usingnamespace std; constint INF = 0x3f3f3f3f; int n, m; vector<int> a, b; intmain(){ scanf("%d%d", &n, &m); a.resize(n), b.resize(n); for (int i = 0; i < n; i++)scanf("%d", &a[i]); for (int i = 0; i < n; i++)scanf("%d", &b[i]); sort(b.begin(), b.end()); int ans = INF; for (int i = 0; i < n; ++i){ int x; if (b[0] >= a[i])x = b[0] - a[i]; else x = m + b[0] - a[i]; vector<int> c(a); for (int j = 0; j < n; ++j) c[j] = (c[j] + x) % m; sort(c.begin(), c.end()); if (c == b)ans = min(ans, x); } printf("%d\n", ans); return0; }
#include<bits/stdc++.h> usingnamespace std; #define ll long long typedef pair<int, int>pii; constint INF = 0x3f3f3f3f; constint N = 2e5 + 10; int n, a[N], p[N]; ll s1[N], s2[N]; intlowbit(int x){ return x & -x; } voidadd(ll* sum, int x, int b){ for (int i = x; i <= n; i += lowbit(i)) { sum[i] += b; } } ll query(ll* sum, int r){ ll ans = 0; for (int i = r; i > 0; i -= lowbit(i)) { ans += sum[i]; } return ans; } ll ans; intmain(){ scanf("%d", &n); for (int i = 1; i <= n; i++) { scanf("%d", &a[i]); p[a[i]] = i; } for (int i = 1; i <= n; i++) { add(s1, p[i], 1); add(s2, p[i], p[i]); ans += 1ll*i - query(s1, p[i]); int L = 1, R = n; while (L < R) { int mid = L + R + 1 >> 1; if (query(s1, mid - 1) * 2 <= i)L = mid; else R = mid - 1; } ll aa = 1ll * i / 2, bb = 1ll * i - 1ll * i / 2 - 1ll; ll sum = (2 * L - aa - 1)*aa / 2 - query(s2, L - 1); sum += query(s2, n) - query(s2, L) - (2 * L + bb + 1)*bb / 2; printf("%lld%s", ans + sum, i == n ? "\n" : " "); } return0; }