Submission #1146942

#TimeUsernameProblemLanguageResultExecution timeMemory
1146942MatjazTeams (CEOI11_tea)C++17
0 / 100
398 ms327680 KiB
#include<iostream> #include<vector> #include<algorithm> #include <deque> using namespace std; int main(){ int N; cin >> N; vector<pair<int,int> > a(N); for (int i=0;i<N;i++) { cin >> a[i].first; a[i].second = i + 1; } sort(a.begin(), a.end()); vector<int> teams(N, 0); vector<int> minmaxteam(N, N); vector<int> next(N, -1); vector<int> cumulmax_teams(N, 0); for (int i=0;i<N;i++){ if (a[i].first > i + 1) teams[i] = 0; else { if (i - a[i].first < 0) teams[i] = 1; else teams[i] = 1 + cumulmax_teams[i - a[i].first]; } if (i == 0) cumulmax_teams[i] = teams[i]; else cumulmax_teams[i] = max(teams[i],cumulmax_teams[i - 1]); } vector<deque<int> > d(N + 1); for (int i=0;i<N;i++){ minmaxteam[i] = i + 1; if (teams[i] > 1) { deque<int>::iterator e = upper_bound(d[teams[i] - 1].begin(), d[teams[i] - 1].end(), i-a[i].first); for (deque<int>::iterator it=d[teams[i] - 1].begin(); it != e; it++){ int j = *it; if (minmaxteam[i] > max(i-j, minmaxteam[j])){ minmaxteam[i] = min(minmaxteam[i], max(i-j, minmaxteam[j])); next[i] = j; } } } while (minmaxteam[d[teams[i]].back()] >= minmaxteam[i]) d[teams[i]].pop_back(); d[teams[i]].push_back(i); } cout << teams[N - 1] << endl; int cur = N - 1; while (cur > -1){ cout << cur - next[cur]; for (int i=next[cur]+1; i<=cur;i++) cout << " " << a[i].second; cout << endl; cur = next[cur]; } return 0; }
#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...