Submission #533877

#TimeUsernameProblemLanguageResultExecution timeMemory
533877CaroLindaTeams (CEOI11_tea)C++14
0 / 100
303 ms86924 KiB
#include <bits/stdc++.h> #define mk make_pair #define lp(i,a,b) for(int i = a ; i < b; i++ ) #define sz(x) (int)x.size() #define all(x) x.begin(),x.end() const int MAX = 1e6+5 ; using namespace std ; int main(){ ios_base::sync_with_stdio(false ); cin.tie(0) ; int N ; cin >> N ; vector<int> arr(N) , idx(N) ; iota(all(idx) , 0) ; vector<int> corte(N) , mx(N) , tam(N) ; for(auto &e : arr ) cin >> e ; sort(all(idx),[&](int a, int b) { return arr[a] > arr[b] ; }) ; vector<int> dp(N) ; vector< vector<int> > sweep( N+1 , vector<int>() ) ; for(int i = 0 ; i < N ; i++ ){ if(arr[idx[i]]+i <= N) sweep[arr[idx[i]]+i].push_back(i) ; dp[i] = -2*N ; corte[i] = -1 ; if(i+1 >= arr[idx[0]]) dp[i] = 1 , tam[i] = i+1 ; for(auto e : sweep[i+1]){ if(e == 0) continue ; if( i-e+1 >= arr[idx[e]] && mk(dp[e-1]+1,-max(tam[e-1], i-e+1) ) > mk(dp[i] , -tam[i]) ){ corte[i] = e-1 ; dp[i] = dp[e-1]+1 ; tam[i] = max(tam[e-1] , i-e+1 ) ; } } if(i && dp[i-1] > 0 ){ int p = i/dp[i-1] ; if( tam[i-1] > p || tam[i-1]*dp[i-1] > i ){ if(mk(dp[i-1], -tam[i-1]) > mk(dp[i] , -tam[i]) ){ dp[i] = dp[i-1] ; tam[i] = tam[i-1] ; } } } //cout << dp[i] << " " << tam[i] << endl ; } vector<vector<int> > ans ; int x = N-1 ; while(x != -1){ ans.push_back(vector<int>()) ; int i ; for(i = x-arr[idx[x]] ; i >= x-tam[x] ; i-- ){ if(dp[i] == dp[x]-1 && tam[i] <= tam[x] ) break ; } for(int j = i+1 ; j<= x ;j++ ) ans.back().push_back(idx[j]+1) ; x = i ; } cout << sz(ans) <<"\n" ; for(auto e : ans ){ cout << sz(e) <<" " ; for(auto ee : e ) cout << ee <<" " ; 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...