#include <bits/stdc++.h>
using namespace std;
void update(vector<vector<int>> &dp, int x)
{
}
int main()
{
int N;
cin >> N;
vector<pair<int, int>> sorted(N);
for (int i = 0; i < N; i++)
{
cin >> sorted[i].first;
sorted[i].second = i + 1;
}
sort(sorted.begin(), sorted.end());
vector<vector<int>> dp(N + 1, {0, 0, 0});
for (int i = N; i > 0; i--)
{
if (dp[i][0] == 0 && i != N)
continue;
if (dp[i][1] == -(int)ceil((double)(N - i) / dp[i][0]))
dp[i][2] = i + floor((double)(N - i) / dp[i][0]);
dp[i - 1] = max(dp[i - 1], {dp[i][0], min(dp[i][1], -(int)ceil((double)(N - i + 1) / dp[i][0])), dp[i][2]});
if (sorted[i - 1].first <= i)
dp[i - sorted[i - 1].first] = max(dp[i - sorted[i - 1].first], {dp[i][0] + 1, min(dp[i][1], -sorted[i - 1].first), i});
}
cout << dp[0][0] << '\n';
int x = 0;
while (x < N)
{
cout << dp[x][2] - x << ' ';
int temp = dp[x][2];
while (x < temp)
{
cout << sorted[x].second << ' ';
x++;
}
cout << '\n';
}
}
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |