Submission #533885

# Submission time Handle Problem Language Result Execution time Memory
533885 2022-03-07T14:41:29 Z CaroLinda Teams (CEOI11_tea) C++14
100 / 100
393 ms 143268 KB
#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] ;
  				}
  			}
  			else if( mk(dp[i-1], -tam[i-1]-1) > mk(dp[i] , -tam[i]) ){
  				dp[i] = dp[i-1] ;
  				tam[i] = tam[i-1]+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 >= max(0,x-tam[x]) ; i-- ){
			if(dp[i] == dp[x]-1 && tam[i] <= tam[x] && arr[idx[i+1]] <= x-i ) 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 time Memory Grader output
1 Correct 0 ms 204 KB Output is correct
2 Correct 0 ms 204 KB Output is correct
3 Correct 0 ms 204 KB Output is correct
4 Correct 0 ms 204 KB Output is correct
5 Correct 0 ms 204 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 0 ms 204 KB Output is correct
2 Correct 0 ms 204 KB Output is correct
3 Correct 1 ms 204 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 1 ms 204 KB Output is correct
2 Correct 1 ms 204 KB Output is correct
3 Correct 1 ms 204 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 2 ms 716 KB Output is correct
2 Correct 2 ms 688 KB Output is correct
3 Correct 2 ms 716 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 4 ms 588 KB Output is correct
2 Correct 2 ms 716 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 23 ms 6860 KB Output is correct
2 Correct 32 ms 7532 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 27 ms 7892 KB Output is correct
2 Correct 20 ms 7244 KB Output is correct
3 Correct 27 ms 8388 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 223 ms 67464 KB Output is correct
2 Correct 221 ms 69520 KB Output is correct
3 Correct 225 ms 65120 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 301 ms 86968 KB Output is correct
2 Correct 391 ms 143268 KB Output is correct
3 Correct 277 ms 92460 KB Output is correct
4 Correct 317 ms 78480 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 295 ms 75796 KB Output is correct
2 Correct 205 ms 62112 KB Output is correct
3 Correct 273 ms 90156 KB Output is correct
4 Correct 393 ms 94352 KB Output is correct