Advertisement
Guest User

Untitled

a guest
Feb 17th, 2020
130
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.84 KB | None | 0 0
  1. #pragma GCC optimize("Ofast,no-stack-protector")
  2. #pragma GCC target("sse,sse2,sse3,ssse3,sse4,popcnt,abm,mmx,avx,avx2,tune=native")
  3. #pragma GCC optimize("unroll-loops")
  4. #pragma GCC optimize("fast-math")
  5. #pragma GCC optimize("profile-values,profile-reorder-functions,tracer")
  6. #pragma GCC optimize("vpt")
  7. #pragma GCC optimize("rename-registers")
  8. #pragma GCC optimize("move-loop-invariants")
  9. #pragma GCC optimize("unswitch-loops")
  10. #pragma GCC optimize("function-sections")
  11. #pragma GCC optimize("data-sections")
  12. #pragma GCC optimize("branch-target-load-optimize")
  13. #pragma GCC optimize("branch-target-load-optimize2")
  14. #pragma GCC optimize("btr-bb-exclusive")
  15.  
  16. #include <bits/stdc++.h>
  17.  
  18. #include <ext/pb_ds/assoc_container.hpp>
  19. #include <ext/pb_ds/tree_policy.hpp>
  20. #include <ext/pb_ds/detail/standard_policies.hpp>
  21.  
  22. #define pb push_back
  23. #define F first
  24. #define S second
  25. #define lll long long
  26. #define lld long double
  27.  
  28. #define data sdadsd
  29.  
  30. //#define int lll
  31.  
  32. using namespace std;
  33. using namespace __gnu_pbds;
  34.  
  35. template <typename T>
  36. using ordered_set = tree <T,null_type,less<T>,rb_tree_tag,tree_order_statistics_node_update>;
  37.  
  38. mt19937 gen(chrono::system_clock::now().time_since_epoch().count());
  39.  
  40. const int N = 2e5 + 123;
  41. const int M = 1e9 + 7;
  42. const int mod = 998244353;
  43. const int rx[4] = {0, 0, -1, 1};
  44. const int ry[4] = {-1, 1, 0, 0};
  45. const lld eps = 1e-11;
  46. const double pi = acos(-1.0);
  47. const int kx[8] = {1, 1, -1, -1, 2, 2, -2, -2};
  48. const int ky[8] = {2, -2, 2, -2, 1, -1, 1, -1};
  49.  
  50. int a[N];
  51.  
  52. unordered_map < int, bool > u;
  53.  
  54. int calc[N];
  55.  
  56. int prec[N];
  57.  
  58. main() {
  59. ios_base::sync_with_stdio(0);
  60. cin.tie(0);
  61. cout.tie(0);
  62. srand(time(0));
  63. #ifdef LOCAL
  64. freopen("input.txt", "r", stdin);
  65. freopen("output.txt", "w", stdout);
  66. #else
  67. // freopen("pizza.in", "r", stdin);
  68. // freopen("pizza.out", "w", stdout);
  69. #endif
  70. lll res = 0;
  71. int n;
  72. cin >> n;
  73. unordered_map < int, int > last;
  74. for (int i = 0; i < n; ++i) {
  75. cin >> a[i];
  76. if (!last.count(a[i])) {
  77. prec[i] = 1e9;
  78. } else {
  79. prec[i] = i - last[a[i]];
  80. }
  81. last[a[i]] = i;
  82. }
  83. for (int i = n - 1; i >= 0; --i) {
  84. calc[i] = calc[i + 1];
  85. calc[i] += (!u[a[i]]);
  86. u[a[i]] = 1;
  87. }
  88. ordered_set < pair < int, int > > all;
  89. for (int i = 0; i < n; ++i) {
  90. all.insert({prec[i], i});
  91. }
  92. int add;
  93. for (int i = 1; i <= n; ++i) {
  94. if (i == 1) {
  95. res = n;
  96. } else {
  97. res -= calc[n - i + 1];
  98. add = int(all.size()) - all.order_of_key({i, 1});
  99. // cout << i << ' ' << add << endl;
  100. res += add;
  101. }
  102. cout << res << ' ';
  103. all.erase({prec[i - 1], i - 1});
  104. }
  105. return 0;
  106. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement