Advertisement
Korotkodul

до B

Jun 3rd, 2022 (edited)
77
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.92 KB | None | 0 0
  1. #include <iostream>
  2. #include <cmath>
  3. #include <vector>
  4. #include <queue>
  5. #include <algorithm>
  6. #include <string>
  7. #include <stack>
  8. #include <set>
  9. #include <map>
  10. #define pii pair <int,int>
  11. #define vec vector
  12. using namespace std;
  13. using ll = long long;
  14. using ld = long double;
  15. using db = double;
  16. void cv(vector <int> &v){
  17.     for (auto x: v) cout<<x<<' ';
  18.     cout<<"\n";
  19. }
  20.  
  21. void cvl(vector <ll> &v){
  22.     for (auto x: v) cout<<x<<' ';
  23.     cout<<"\n";
  24. }
  25.  
  26.  
  27. void cvv(vector <vector <int> > &v){
  28.     for (auto x: v) cv(x);
  29.     cout<<"\n";
  30. }
  31.  
  32. void cvb(vector <bool> v){
  33.     for (bool x: v) cout<<x<<' ';
  34.     cout<<"\n";
  35. }
  36.  
  37. void cvs(vector <string>  v){
  38.     for (auto a: v){
  39.         cout<<a<<"\n";
  40.     }
  41. }
  42.  
  43. int n = 100000, gdN;
  44.  
  45. struct tree{
  46.     vector <pii> v;
  47.     void bld(){
  48.         int gdpow = log2(n);
  49.         if (pow(2, gdpow) < n){
  50.             gdpow++;
  51.         }
  52.         gdN = pow(2, gdpow);
  53.         v.assign(2*gdN-1, {0,0});
  54.         //{число, кол-во чисел}
  55.     }
  56.     void ch(int x){
  57.         int id = gdN - 2 + x;
  58.         v[id].second++;
  59.         v[id].first = x;
  60.  
  61.         while (id > 0){
  62.             id--; id/=2;
  63.             v[id].first = max(v[id*2+1].first,v[id*2+2].first);
  64.         }
  65.     }
  66.  
  67.     int get(){
  68.         int x = v[0].first;
  69.         //cout<<x<<"\n";
  70.  
  71.         int id = gdN - 2 + x;
  72.         v[id].second--;
  73.         if (v[id].second == 0){
  74.             v[id].first = 0;
  75.             while (id > 0){
  76.                 id--; id/=2;
  77.                 v[id].first = max(v[id*2+1].first,v[id*2+2].first);
  78.             }
  79.         }
  80.  
  81.         return x;
  82.     }
  83. };
  84.  
  85. int main()
  86. {
  87.     ios::sync_with_stdio(0);
  88.     cin.tie(0);
  89.     cout.tie(0);
  90.     int q; cin>>q;
  91.     tree T;
  92.     T.bld();
  93.     for (int i = 0; i < q; ++i){
  94.         int cd; cin>>cd;
  95.         if (cd == 0){
  96.             int k; cin>>k;
  97.             T.ch(k);
  98.         }
  99.         else {
  100.             cout<<T.get()<<"\n";
  101.         }
  102.     }
  103. }
  104.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement