ec1117

Untitled

Mar 28th, 2021 (edited)
134
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.36 KB | None | 0 0
  1. #include "bits/stdc++.h"
  2. using namespace std;
  3.  
  4. template<class T> using min_pq=priority_queue<T, vector<T>, greater<T>>;
  5. mt19937 rng(chrono::steady_clock::now().time_since_epoch().count());
  6.  
  7. int rnd(int l, int r){
  8.     return uniform_int_distribution<int>(l, r)(rng);
  9. }
  10.  
  11. #define sz(v) (int)v.size()
  12. #define ar array
  13. // #define f first
  14. // #define s second
  15. typedef vector<int> vi;
  16. typedef long long ll;
  17. typedef long double ld;
  18. typedef unsigned int ui;
  19. const int MAXN = 3e5+10, MAXQ = 3e5+10, MAXL = 20, ALP = 26, MOD = 1e9+7, MAXK = 17, INF = 1e9+10, MAXA = 30, MAXB = 24, MAXBB = (1<<MAXB);
  20. const string  no = "NO\n", yes = "YES\n";
  21. const int hA[4] = {1, 0, -1, 0}, kA[4] = {0, 1, 0, -1};
  22.  
  23. #include<bits/extc++.h>
  24.  
  25. int n, q;
  26. ll a[MAXN], val[MAXN+MAXQ];
  27. map<ll, int> loc;
  28. hash_set<int> pos[MAXN+MAXQ];
  29. int cloc = 0, me[MAXN];
  30.  
  31. int mrg(int i, int j) {
  32.     if (sz(pos[i]) < sz(pos[j])) {
  33.         swap(i, j);
  34.     }
  35.     for (auto v : pos[j]) {
  36.         pos[i].insert(v);
  37.         me[v] = i;
  38.     }
  39.     pos[j].clear();
  40.     return i;
  41. }
  42. void solve(){
  43.     cin >> n >> q;
  44.     for (int i = 0; i < n; i++) {
  45.         cin >> a[i];
  46.         if (!loc.count(a[i])) loc[a[i]] = cloc++;
  47.         pos[loc[a[i]]].insert(i);
  48.         val[loc[a[i]]] = a[i], me[i] = loc[a[i]];
  49.     }
  50.     while (q--) {
  51.         int t; cin >> t;
  52.         if (t == 1) {
  53.             int i; ll x; cin >> i >> x, --i;
  54.  
  55.             ll ai = val[me[i]];
  56.             int ol = me[i];
  57.             pos[ol].erase(i);
  58.             if (!sz(pos[ol]))
  59.                 loc.erase(ai);
  60.  
  61.             ai += x;
  62.             if (!loc.count(ai)) {
  63.                 loc[ai] = cloc++;
  64.                 val[loc[ai]] = ai;
  65.             }
  66.             me[i] = loc[ai];
  67.             pos[loc[ai]].insert(i);
  68.         }
  69.         if (t == 2) {
  70.             ll x, y; cin >> x >> y;
  71.            
  72.             if (!loc.count(y))
  73.                 loc[y] = cloc++;
  74.             int yl=loc[y];
  75.             val[yl] = y;
  76.  
  77.             auto it = loc.begin();
  78.             while (it != loc.end() && it->first <= x) {
  79.                 loc[y] = yl = mrg(it->second, yl);
  80.                 val[yl] = y;
  81.  
  82.                 loc.erase(it);
  83.                 it = loc.begin();
  84.             }
  85.         }
  86.     }
  87.     for (int i = 0; i < n; i++) cout << val[me[i]] << ' '; cout << '\n';
  88. }
  89. int main(){
  90.     ios::sync_with_stdio(false); cin.tie(0);
  91.     solve();
  92. }
  93.  
Add Comment
Please, Sign In to add comment