#include #include using namespace std; using namespace atcoder; int N; vector op(vector a, vector b) { vector res(N); for (int i = 0; i < N; i++) { res[i] = a[b[i]]; } return res; } vector e() { vector res(N); for (int i = 0; i < N; i++) { res[i] = i; } return res; } int main() { int M, Q; cin >> N >> M >> Q; segtree, op, e> seg(M); while (Q--) { int t; cin >> t; if (t == 1) { int D; cin >> D; D--; vector P(N); for (int i = 0; i < N; i++) { cin >> P[i]; P[i]--; } vector inv(N); for (int i = 0; i < N; i++) { inv[P[i]] = i; } seg.set(D, inv); } else if (t == 2) { int S; cin >> S; vector ans = seg.prod(0, S); for (int i = 0; i < N; i++) cout << ans[i] + 1 << ' '; cout << '\n'; } else { int L, R; cin >> L >> R; L--; vector p = seg.prod(L, R); int ans = 0; for (int i = 0; i < N; i++) { ans += abs(p[i] - i); } cout << ans << '\n'; } /* cout << '\n'; for (int S = 1; S <= M; S++) { vector ans = seg.prod(0, S); for (int i = 0; i < N; i++) cout << ans[i] + 1 << ' '; cout << '\n'; } cout << '\n'; */ } }