Advertisement
Misbah_Uddin_Tareq

Toph(E) set using upper_bound

Apr 14th, 2020
177
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.00 KB | None | 0 0
  1. #include<bits/stdc++.h>
  2. #include <ext/pb_ds/tree_policy.hpp>
  3. #include <ext/pb_ds/assoc_container.hpp>
  4. using namespace std;
  5. using namespace __gnu_pbds;
  6. using ll = long long;
  7. #define pb push_back
  8. #define ff first
  9. #define ss second
  10.  
  11. template <typename T>  using orderedSet =
  12.    tree<T, null_type, less<T>,
  13.    rb_tree_tag, tree_order_statistics_node_update>;
  14.  
  15. int main()
  16. {
  17.     int n;
  18.     scanf("%d",&n);
  19.     int a[n+5],b[n+5];
  20.  
  21.     for(int i=1; i<=n; i++)
  22.         scanf("%d",&a[i]);
  23.     int pos[n+5];
  24.     for(int i=1; i<=n; i++)
  25.     {
  26.         scanf("%d",&b[i]);
  27.         pos[b[i]]=i;
  28.     }
  29.  
  30.     int ans=0;
  31.     orderedSet<int>st;
  32.     st.insert(0);
  33.     for(int i=1; i<=n; i++)
  34.     {
  35.         int x=pos[a[i]];
  36.  
  37.         auto p=st.upper_bound(x);
  38.         int z=st.order_of_key(*p);
  39.         if(z==0)
  40.             st.insert(x);
  41.         else
  42.         {
  43.             int y=st.size()-z;
  44.             ans+=y;
  45.             //cout<<a[i]<<": "<<st.size()<<" "<<z<<endl;
  46.             st.insert(x);
  47.         }
  48.     }
  49.  
  50.     printf("%d",ans);
  51.  
  52.     return 0;
  53. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement