193702025-12-05 12:16:24Nailuj217Gnome Sortcpp17Accepted 100/100763ms55432 KiB
#include <bits/stdc++.h>
#define ll long long
using namespace std;



int main() {


    ll n;
    cin >> n;
    vector<ll> seq(n);
    for (int i = 0; i < n; i++) cin >> seq[i];

    vector<bool> used(n, false);
    vector<vector<ll>> circles;
    ll k;
    for (int i = 0; i < n; i++) {
        if (used[i]) continue;
        if (seq[i] == i) continue;
        circles.push_back({i});
        k = seq[i];
        while (k != i) {
            used[k] = true;
            circles.back().push_back(k);
            k = seq[k];
        }
    }
    for (auto &c: circles) {
        sort(c.begin(), c.end());
        for (int i = 0; i < c.size() - 1; i++) {
            if (seq[c[i]] < seq[c[i+1]]) {
                cout << "NO" << endl;
                return 0;
            }
        }
    }
    cout << "YES" << endl;

    vector<pair<ll, ll>> ps;
    for (auto &c: circles) {
        ps.push_back({c[0], c[1]});
    }

    sort(ps.begin(), ps.end());
    vector<vector<ll>> sets;
    set<pair<ll, ll>> u;
    for (auto [a, b]: ps) {
        if (u.empty() || (*(--u.end())).first < b) {
            u.insert({b, sets.size()});
            sets.push_back({a, b});
        } else {
            pair<ll, ll> it = *u.lower_bound({b, -1});
            u.erase(it);
            u.insert({b, it.second});
            sets[it.second].push_back(a);
            sets[it.second].push_back(b);
        }
    }
    cout << u.size() << endl;
    for (auto &s: sets) {
        sort(s.begin(), s.end());
        cout << s.size() << " ";
        for (auto a: s) cout << a << " ";
        cout << endl;
    }



    return 0;
}
SubtaskSumTestVerdictTimeMemory
subtask10/0
1Accepted1ms316 KiB
2Accepted1ms316 KiB
subtask25/5
3Accepted1ms508 KiB
4Accepted1ms316 KiB
5Accepted1ms316 KiB
subtask310/10
6Accepted1ms508 KiB
7Accepted1ms316 KiB
8Accepted1ms316 KiB
9Accepted1ms316 KiB
10Accepted1ms316 KiB
11Accepted1ms316 KiB
12Accepted1ms316 KiB
13Accepted1ms316 KiB
subtask435/35
14Accepted1ms508 KiB
15Accepted1ms316 KiB
16Accepted1ms316 KiB
17Accepted1ms316 KiB
18Accepted1ms316 KiB
19Accepted1ms316 KiB
20Accepted1ms316 KiB
21Accepted1ms316 KiB
22Accepted1ms508 KiB
23Accepted1ms500 KiB
24Accepted1ms316 KiB
25Accepted1ms508 KiB
26Accepted1ms316 KiB
27Accepted3ms316 KiB
28Accepted4ms564 KiB
29Accepted4ms616 KiB
30Accepted4ms692 KiB
31Accepted7ms952 KiB
32Accepted3ms316 KiB
33Accepted4ms564 KiB
34Accepted2ms316 KiB
subtask550/50
35Accepted1ms316 KiB
36Accepted1ms316 KiB
37Accepted1ms508 KiB
38Accepted1ms316 KiB
39Accepted1ms316 KiB
40Accepted1ms316 KiB
41Accepted1ms316 KiB
42Accepted1ms316 KiB
43Accepted1ms316 KiB
44Accepted1ms316 KiB
45Accepted1ms508 KiB
46Accepted1ms500 KiB
47Accepted1ms316 KiB
48Accepted1ms508 KiB
49Accepted1ms316 KiB
50Accepted3ms316 KiB
51Accepted4ms564 KiB
52Accepted4ms616 KiB
53Accepted4ms692 KiB
54Accepted7ms952 KiB
55Accepted3ms316 KiB
56Accepted4ms564 KiB
57Accepted2ms316 KiB
58Accepted8ms912 KiB
59Accepted37ms3372 KiB
60Accepted37ms2160 KiB
61Accepted39ms2212 KiB
62Accepted303ms28300 KiB
63Accepted312ms28380 KiB
64Accepted175ms4148 KiB
65Accepted340ms33240 KiB
66Accepted193ms8536 KiB
67Accepted393ms31704 KiB
68Accepted418ms31704 KiB
69Accepted749ms55432 KiB
70Accepted305ms27020 KiB
71Accepted321ms25228 KiB
72Accepted389ms31880 KiB
73Accepted763ms55432 KiB