Advertisement
Guest User

Untitled

a guest
Oct 15th, 2019
75
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.77 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2. /*
  3. #pragma GCC optimize ("O3")
  4. #pragma GCC target ("avx2")
  5. #pragma GCC target (sse, sse2, sse3, ssse3, sse4,popcnt,tune=native)
  6. */
  7. #define FOR(i, s, e) for(int i=s; i<e; i++)
  8. #define loop(i, n) for(int i=0; i<n; i++)
  9. #define CIN ios_base::sync_with_stdio(0); cin.tie(0)
  10. #define pb push_back
  11. #define ll long long int
  12. #define ull unsigned long long int
  13. #define ld long double
  14. #define SZ(a) (int)(a.size())
  15. #define Read() freopen("input.txt", "r", stdin)
  16. #define Write() freopen("output.txt", "w", stdout)
  17. #define mem(a, v) memset(a, v, sizeof(a))
  18. #define all(v) v.begin(), v.end()
  19. #define rall(v) v.rbegin(), v.rend()
  20. #define Unique(x) x.erase(unique(all(x)), x.end())
  21. #define pi acos(-1.0)
  22. #define vec vector
  23. #define mp make_pair
  24. #define paii pair<int, int>
  25. #define padd pair<dd, dd>
  26. #define pall pair<ll, ll>
  27. #define fr first
  28. #define sc second
  29. //#define endl "\n"
  30. #define vec vector
  31.  
  32. using namespace std;
  33.  
  34. #define int long long
  35.  
  36. const int inf = 1e12 + 47, MAXN = 3e5 + 47;
  37.  
  38. struct node{
  39. int l, r, nv, mn;
  40. node(int p = -1) {
  41. l = r = -1;
  42. nv = -1;
  43. mn = inf;
  44. }
  45. };
  46.  
  47. vec<int> a;
  48. vec<node> t(4 * MAXN);
  49.  
  50. void build(int i, int l, int r) {
  51. t[i].l = l, t[i].r = r;
  52. if(l == r) {
  53. t[i].mn = a[l];
  54. return;
  55. }
  56. int mid = (l + r) / 2;
  57. build(i * 2, l, mid);
  58. build(i * 2 + 1, mid + 1, r);
  59. t[i].mn = min(t[i * 2].mn, t[i * 2 + 1].mn);
  60. }
  61.  
  62. void push(int i) {
  63. if(t[i].nv == -1) return;
  64. if(t[i].l != t[i].r) {
  65. t[i * 2].nv = t[i * 2 + 1].nv = t[i].nv;
  66. }
  67. t[i].mn = t[i].nv;
  68. t[i].nv = -1;
  69. }
  70.  
  71. void change(int i, int l, int r, int v) {
  72. push(i);
  73. if(l > t[i].r || t[i].l > r) return;
  74. if(l <= t[i].l && t[i].r <= r) {
  75. t[i].nv = v;
  76. push(i);
  77. return;
  78. }
  79. change(i * 2, l, r, v);
  80. change(i * 2 + 1, l, r, v);
  81. t[i].mn = min(t[i*2].mn, t[i * 2 + 1].mn);
  82. }
  83.  
  84. int get_left(int i) {
  85. push(i);
  86. if(t[i].l == t[i].r) {
  87. return t[i].l;
  88. }
  89. if(t[i*2].mn <= t[i*2+1].mn) {
  90. return get_left(i * 2);
  91. } else {
  92. return get_left(i * 2 + 1);
  93. }
  94. }
  95.  
  96. int get_right(int i) {
  97. push(i);
  98. if(t[i].l == t[i].r) {
  99. return t[i].l;
  100. }
  101. if(t[i*2].mn < t[i*2+1].mn) {
  102. return get_right(i * 2);
  103. } else {
  104. return get_right(i * 2 + 1);
  105. }
  106. }
  107.  
  108. int get() {
  109. push(1);
  110. return t[1].mn;
  111. }
  112.  
  113. int get_min(int i, int pos) {
  114. push(i);
  115. if(pos > t[i].r || pos < t[i].l) return inf;
  116. if(pos <= t[i].l && t[i].r <= pos) return t[i].mn;
  117. return min(get_min(i * 2, pos), get_min(i * 2 + 1, pos));
  118. }
  119.  
  120. int n, cnt = 0;
  121. map<int, int> trans, rev;
  122.  
  123. void read() {
  124. cin >> n;
  125. a.resize(n);
  126. loop(i, n) cin >> a[i];
  127.  
  128. int q;
  129. cin >> q;
  130. loop(i, q) {
  131. int t;
  132. cin >> t;
  133. if(trans.find(t) != trans.end()) continue;
  134. trans[t] = cnt;
  135. rev[cnt] = t;
  136. cnt++;
  137. }
  138. int cock = cnt;
  139.  
  140. loop(i, n) {
  141. if(trans.find(a[i]) == trans.end()) {
  142. trans[a[i]] = cnt;
  143. rev[cnt] = a[i];
  144. cnt++;
  145. }
  146. a[i] = trans[a[i]];
  147. }
  148.  
  149. //loop(i, n) cout << a[i] << " ";
  150. //cout << endl;
  151. build(1, 0, n - 1);
  152.  
  153. loop(i, cock) {
  154. if(get() > i) continue;
  155. int l = get_left(1), r = get_right(1);
  156. rev[cnt] = rev[i];
  157.  
  158. change(1, l, r, cnt);
  159. cnt++;
  160. }
  161.  
  162. loop(i, n) {
  163. int t = get_min(1, i);
  164. cout << rev[t] << " ";
  165. }
  166. cout << endl;
  167. }
  168.  
  169. void solve() {
  170. }
  171.  
  172. signed main()
  173. {
  174. CIN;
  175. int t = 1;
  176. //cin >> t;
  177. while(t--) {
  178. read();
  179. solve();
  180. }
  181. }
  182. /*
  183. 8
  184. 7 1 7 1 23 9 23 1
  185. 4
  186. 23 4 7 1
  187. */
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement