Submission #1279790

#TimeUsernameProblemLanguageResultExecution timeMemory
1279790raphaelpTeams (CEOI11_tea)C++20
50 / 100
421 ms69952 KiB
#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 timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...