Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <bits/stdc++.h>
- using namespace std ;
- bool soman( map<int,int>m , vector<int> v , int s , int e )
- {
- bool flag = true ;
- for( int i = s ; i <= e ; i++ ) {
- if( m[v[i]] != m[-v[i]] ) {
- return false ;
- }
- }
- return true ;
- }
- map<int,int> gona( vector<int> v , int s , int e )
- {
- map<int,int> m ;
- for( int i = s ; i <= e ; i++ ) m[v[i]]++ ;
- return m ;
- }
- pair<int,int> func( vector<int> v , int s , int e )
- {
- // cout << s << " " << e << endl ;
- pair<int,int> zero = { 0 , 0 } ;
- map<int,int> m ;
- for( int i = e ; i < v.size() ; i++ ) {
- m = gona( v , s , i ) ;
- if( false == soman( m , v , s , i ) ) {
- continue ;
- }
- else {
- pair<int,int> ei_je = { s , i } ;
- for( auto x = m.begin() ; x != m.end() ; x++ ) {
- int val = x->second ;
- if( val >= 2 ) return zero ;
- }
- // cout << s << " " << i << endl ;
- return ei_je ;
- }
- }
- // return zero ;
- }
- int main( void )
- {
- int n ;
- cin >> n ;
- vector<int> v( n ) ;
- map<int,int> m ;
- bool flag = true ;
- for( int i = 0 ; i < n ; i++ ) {
- cin >> v[i] ;
- m[v[i]]++ ;
- if( v[i] < 0 ) {
- int pos_freq = m[-v[i]] , neg_freq = m[v[i]] ;
- if( neg_freq > pos_freq ) {
- flag = false ;
- }
- }
- else if( v[i] > 0 ) {
- int pp = m[v[i]] , nn = m[-v[i]] ;
- int dif = pp-nn ;
- if( dif >= 2 ) {
- flag = false ;
- }
- }
- }
- for( int i = 0 ; i < n ; i++ ) {
- if( m[v[i]] != m[-v[i]] ) {
- flag = false ;
- }
- }
- if( flag == false ) {
- cout << -1 << endl ;
- }
- else {
- vector<pair<int,int>> vpp ;
- pair<int,int> qq = { 0 , 0 } ;
- for( int i = 0 ; i < n ; i++ ) {
- int val = v[i] , oppo = -v[i] ;
- for( int j = i+1 ; j < n && val > 0 ; j++ ) {
- if( v[j] == oppo ) {
- pair<int,int> pp = func( v , i , j ) ;
- // cout << pp.first << " xie " << pp.second << endl ;
- // cout << "i : " << i << " j : " << j << endl ;
- // cout << vpp.size() << endl ;
- if( pp == qq ) {
- // cout << "soman\n" ;
- flag = false ;
- break ;
- }
- else {
- vpp.emplace_back( pp.first , pp.second ) ;
- i = pp.second ;
- break ;
- // cout << pp.first << " " << pp.second << endl ;
- }
- }
- }
- }
- if( flag == false ) {
- cout << -1 << endl ; // cout << "ya123\n" ;
- }
- else {
- cout << vpp.size() << endl ; // cout << "yes\n" ;
- for( int i = 0 ; i < vpp.size() ; i++ ) {
- // cout << vpp[i].first << " " << vpp[i].second << endl ;
- cout << abs( vpp[i].first - vpp[i].second ) + 1 << " " ;
- }
- }
- }
- return 0 ;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement