fork download
  1. // ROOT : DRAGON3012009 : Wa In Real Life
  2. #include <bits/stdc++.h>
  3. #define ll long long
  4. #define el "\n"
  5. #define _ROOT_ int main()
  6. #define FOR(i,l,r) for(int i = l ; i <= r ; i ++)
  7. #define FORD(i,r,l) for(int i = r ; i >= l ; i --)
  8. #define REP(i, a ) for(int i = 0 ; i < a ; i ++ )
  9. #define fi first
  10. #define se second
  11. #define M 1000000007
  12. #define MAXN 1000001
  13. #define INF (1ll<<60)
  14. #define NAME "file"
  15. #define compare(v) sort((v).begin(), (v).end()); (v).erase(unique((v).begin(), (v).end()), (v).end());
  16. using namespace std;
  17. const ll MOD[] = {(ll)1e9 + 2277, (ll)1e9 + 5277, (ll)1e9 + 8277, (ll)1e9 + 9277, (ll) 1e9 + 7 };
  18. const ll NMOD = 1;
  19.  
  20. ll n, q ;
  21. ll a[MAXN];
  22. ll lab[MAXN ] ;
  23. bool active[MAXN ] ;
  24. ll ans ;
  25. vector<ll> cpr ;
  26.  
  27. ll find_set(ll a )
  28. {
  29. return lab[a] < 0 ? a : lab[a] = find_set(lab[a]) ;
  30. }
  31.  
  32. bool union_set(ll a, ll b )
  33. {
  34. if(!active[a]) return false ;
  35. if(!active[b]) return false ;
  36. a = find_set(a) ;
  37. b = find_set(b) ;
  38. if(a == b ) return false ;
  39. if(lab[a] > lab[b]) swap(a, b ) ;
  40. ans -= (-lab[a] + 1 ) / 2 ;
  41. ans -= (-lab[b] + 1 ) / 2 ;
  42. // cout << a << " " << b << " " << ans << " data " << el ;
  43. lab[a] += lab[b] ;
  44. ans += (-lab[a] + 1 ) / 2 ;
  45. lab[b] = a ;
  46. return true ;
  47. }
  48.  
  49.  
  50. void init()
  51. {
  52. cin >> n ;
  53. FOR(i, 1, n ) cin >> a[i] ;
  54. }
  55.  
  56. void solve()
  57. {
  58. memset(lab , - 1 , sizeof lab ) ;
  59. FOR(i , 1 , n ) {
  60. if(active[a[i]] == false ) ans ++ ;
  61. active[a[i]] = true ;
  62.  
  63. union_set(a[i] , a[i] - 1 ) ;
  64. union_set(a[i] , a[i] + 1 ) ;
  65. cout << ans << " " ;
  66. }
  67. }
  68.  
  69. _ROOT_
  70. {
  71. // freopen(NAME".inp" , "r" , stdin);
  72. // freopen(NAME".out" , "w", stdout) ;
  73. ios_base::sync_with_stdio(0);
  74. cin.tie(0);
  75. cout.tie(0);
  76. int t = 1; // cin >> t ;
  77. while(t--)
  78. {
  79. init();
  80. solve();
  81. }
  82. return (0&0);
  83. }
  84.  
Success #stdin #stdout 0.01s 11968KB
stdin
Standard input is empty
stdout
Standard output is empty