Guest User

q.cpp

a guest
Mar 21st, 2026
19
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.32 KB | None | 0 0
  1. #include <iostream>
  2. #include <vector>
  3. #include <algorithm>
  4. #include <map>
  5. #include <climits>
  6. #include <set>
  7. #include <numeric>
  8. #include <cmath>
  9. #include <string>
  10. #include <cstdlib>
  11. #define f first
  12. #define s second
  13.  
  14. #define IOS ios::sync_with_stdio(false); cin.tie(nullptr); cout.tie(nullptr);
  15.  
  16. using namespace std;
  17. const int MAXN = 2e5 + 10;
  18. vector <int> t(4 * MAXN, -1);
  19.  
  20. void update(int v, int tl, int tr, int pos, int val){
  21.     if (tl > tr){
  22.         return;
  23.     }
  24.     if (tl == tr){
  25.         t[v] = val;
  26.         return;
  27.     }
  28.     int tm = (tl + tr) >> 1;
  29.     if (pos <= tm){
  30.         update(v << 1, tl, tm, pos, val);
  31.     }
  32.     else{
  33.         update((v << 1) | 1, tm + 1, tr, pos, val);
  34.     }
  35.     t[v] = max(t[v << 1], t[(v << 1) | 1]);
  36. }
  37.  
  38. int get_max(int v, int tl, int tr, int l, int r){
  39.     if (l > r)
  40.         return -1;
  41.     if (tl == l && tr == r){
  42.         return t[v];
  43.     }
  44.     int tm = (tl + tr) >> 1;
  45.     return max(get_max(v << 1, tl, tm, l, min(r, tm)),
  46.                get_max((v << 1) | 1, tm + 1, tr, max(tm + 1, l), r));
  47. }
  48. pair <string, pair <int, int> > q[MAXN];
  49.  
  50. int main() {
  51.     IOS;
  52.     int tt;
  53.     cin >> tt;
  54.     //int name_x = 1;
  55.     //int name_y = 1;
  56.     vector <pair <int, int> > vec;
  57.     vec.push_back({0, 0});
  58.     for (int i = 1; i <= tt; i++){
  59.         cin >> q[i].f >> q[i].s.f >> q[i].s.s;
  60.         if (q[i].f == "add"){
  61.           //  vec_x.push_back(q[i].s.f);
  62.           //  vec_y.push_back(q[i].s.s);
  63.             vec.push_back(q[i].s);
  64.         }
  65.     }
  66.     int m = vec.size();
  67.     /*
  68.     sort(vec_x.begin(), vec_x.end());
  69.     sort(vec_y.begin(), vec_y.end());
  70.     ma_x[vec_x[0]] = 1;
  71.     for (int i = 1; i < vec_x.size(); i++){
  72.         if (vec_x[i] != vec_x[i - 1]){
  73.             ma_x[vec_x[i]] = ++name_x;
  74.         }
  75.     }
  76.  
  77.     ma_y[vec_y[0]] = 1;
  78.     for (int i = 1; i < vec_y.size(); i++){
  79.         if (vec_y[i] != vec_y[i - 1]){
  80.             ma_y[vec_y[i]] = ++name_y;
  81.         }
  82.     }*/
  83.  
  84.     sort(vec.begin(), vec.end());
  85.  
  86.     for (int i = 1; i <= tt; i++){
  87.         if (q[i].f == "add"){
  88.             int x = q[i].s.f;
  89.             int y = q[i].s.s;
  90.             int pos = int(lower_bound(vec.begin(), vec.end(), make_pair(x, y)) - vec.begin()) + 1;
  91.             update(1, 1, m, pos, y);
  92.         }
  93.         else if (q[i].f == "remove"){
  94.             int x = q[i].s.f;
  95.             int y = q[i].s.s;
  96.             int pos = int(lower_bound(vec.begin(), vec.end(), make_pair(x, y)) - vec.begin()) + 1;
  97.             update(1, 1, m, pos, -1);
  98.         }
  99.         else if (q[i].f == "find"){
  100.             int x = q[i].s.f;
  101.             int y = q[i].s.s;
  102.             int pos = int(lower_bound(vec.begin(), vec.end(), make_pair(x + 1, -1)) - vec.begin()) + 1;
  103.  
  104.             int left = pos;
  105.             int right = m;
  106.             int ans = -1;
  107.             while(left <= right){
  108.                 int mid = (left + right) / 2;
  109.                 if (get_max(1, 1, m, pos, mid) > y){
  110.                     ans = mid;
  111.                     right = mid - 1;
  112.                 }
  113.                 else{
  114.                     left = mid + 1;
  115.                 }
  116.             }
  117.             if (ans == -1){
  118.                 cout << -1 << "\n";
  119.             }
  120.             else{
  121.                 cout << vec[ans - 1].f << ' ' << vec[ans - 1].s << "\n";
  122.             }
  123.         }
  124.     }
  125.  
  126.  
  127.  
  128.  
  129.     return 0;
  130. }
  131.  
Advertisement
Add Comment
Please, Sign In to add comment