Advertisement
Georgiy1108

Untitled

Jun 25th, 2020
94
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.81 KB | None | 0 0
  1. #include<bits/stdc++.h>
  2.  
  3. using namespace std;
  4.  
  5. bool check(pair<int, int> a, int i)
  6. {
  7.     return i >= a.first && i <= a.second + 1;
  8. }
  9.  
  10. const int INF = (int)1e9 + 10;
  11.  
  12. main()
  13. {
  14.     ios::sync_with_stdio(0);
  15.     cin.tie(0);
  16.     int m;
  17.     cin >> m;
  18.     vector<vector<int>> v(1);
  19.     vector<pair<int, int>> p(1, {0, 0});
  20.     vector<int> mn(1, INF);
  21.     while(m--)
  22.     {
  23.         char cmd;
  24.         cin >> cmd;
  25.         if(cmd == '+')
  26.         {
  27.             int id, x;
  28.             cin >> id >> x;
  29.             for(int i = 0; i < v.size(); i++)
  30.             {
  31.                 if(check(p[i], id))
  32.                 {
  33.                     int it = id - p[i].first;
  34.                     v[i].insert(v[i].begin() + it, x);
  35.                     if(v[i].size() > 1)
  36.                         p[i].second++;
  37.                     for(int j = i + 1; j < p.size(); j++)
  38.                         p[j].first++, p[j].second++;       
  39.                     mn[i] = min(mn[i], x);
  40.                     int sz = 0;
  41.                     if(v[i].size() > 900)
  42.                     {
  43.                         vector<int> v1, v2;
  44.                         int mn1 = INF, mn2 = INF;
  45.                         for(int j = 0; j < v[i].size() / 2; j++)
  46.                             v1.push_back(v[i][j]), mn1 = min(v[i][j], mn1);
  47.                         for(int j = v[i].size() / 2; j < v[i].size(); j++)
  48.                             v2.push_back(v[i][j]), mn2 = min(v[i][j], mn2);
  49.                         v[i] = v1;
  50.                         v.insert(v.begin() + i + 1, v2);
  51.                         p[i].second = p[i].first + v1.size() - 1;
  52.                         p.insert(p.begin() + i + 1, {p[i].second + 1, p[i].second + v2.size()});
  53.                         mn[i] = mn1;
  54.                         mn.insert(mn.begin() + 1 + i, mn2);
  55.                     }
  56.                     break;
  57.                 }
  58.             }
  59.         }
  60.         else
  61.         {
  62.             int l, r;
  63.             cin >> l >> r;
  64.             l--;
  65.             r--;
  66.             int ans = INF;
  67.             for(int i = 0; i < p.size(); i++)
  68.             {
  69.                 if(p[i].first >= l && p[i].second <= r)
  70.                     ans = min(ans, mn[i]);
  71.                 else if(l > p[i].second)
  72.                     continue;
  73.                 else if(r < p[i].first)
  74.                     continue;
  75.                 else
  76.                     for(int j = 0; j < v[i].size(); j++)
  77.                         if(j + p[i].first >= l && j + p[i].first <= r)
  78.                             ans = min(ans, v[i][j]);
  79.             }
  80.             cout << ans << "\n";
  81.         }  
  82.     }      
  83. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement