Ankit_132

G1

Dec 19th, 2023
472
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.01 KB | None | 0 0
  1.  
  2. #include <bits/stdc++.h>
  3. using namespace std;
  4.  
  5. #define ll     long long
  6. #define _test   int _TEST; cin>>_TEST; while(_TEST--)
  7. #define pb     push_back
  8. #define ppb    pop_back
  9.  
  10. int main()
  11. {
  12.     int MOD = 998244353;
  13.  
  14.     _test
  15.     {
  16.         int n;
  17.         cin>>n;
  18.  
  19.         vector<int> c(2*n);
  20.         for(auto &e: c)     cin>>e;
  21.  
  22.         vector<int> a(n+1, -1), b(n+1);
  23.  
  24.         for(int i=0; i<2*n; i++)
  25.         {
  26.             if(a[c[i]] == -1)
  27.                 a[c[i]] = i;
  28.             else
  29.                 b[c[i]] = i;
  30.         }
  31.  
  32.         ll int x=0, y=1;
  33.  
  34.         vector<int> cnt(2*n+1);
  35.  
  36.         set<int> st, st2;
  37.         vector<int> rem;
  38.  
  39.         for(int i=0; i<2*n;)
  40.         {
  41.             st2.insert(c[i]);
  42.             cnt[c[i]] = 1;
  43.  
  44.             int j = i;
  45.  
  46.             i++;
  47.  
  48.             while(i<2*n && st2.size())
  49.             {
  50.                 if(!cnt[c[i]])
  51.                 {
  52.                     st2.insert(c[i]);
  53.                     cnt[c[i]] = 1;
  54.                 }
  55.                 else
  56.                     st2.erase(c[i]);
  57.  
  58.                 i++;
  59.             }
  60.  
  61.             x++;
  62.  
  63.             int val = 0;
  64.  
  65.             for(int l=j, k, mmin, mmax; l<i; l++)
  66.             {
  67.                 st.clear();
  68.                 for(int _=j; _<i; _++)      st.insert(_);
  69.  
  70.                 rem.clear();
  71.                 rem.pb(l);
  72.  
  73.                 while(rem.size())
  74.                 {
  75.                     mmin = a[c[rem.back()]];
  76.                     mmax = b[c[rem.back()]];
  77.                     rem.ppb();
  78.  
  79.                     if(mmin > mmax)     swap(mmin, mmax);
  80.  
  81.                     while(st.lower_bound(mmin)!=st.end() && *st.lower_bound(mmin)<=mmax)
  82.                     {
  83.                         k = *st.lower_bound(mmin);
  84.                         st.erase(k);
  85.                         rem.pb(k);
  86.                     }
  87.                 }
  88.  
  89.                 val += (st.size() == 0);
  90.             }
  91.  
  92.             (y *= val) %= MOD;
  93.         }
  94.  
  95.         cout<<x<<" "<<y<<"\n";
  96.     }
  97. }
Advertisement
Add Comment
Please, Sign In to add comment