Advertisement
Ritam_C

Codeforces Permutationtree

Feb 16th, 2021
159
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.16 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2. #define ll long long
  3. #define ull unsigned long long int
  4. #define ld long double
  5. #define pb push_back
  6. #define p_b pop_back
  7. #define si stack<int>
  8. #define sll stack<ll>
  9. #define sc stack<char>
  10. #define vi vector<int>
  11. #define vll vector<ll>
  12. #define mii map<int, int>
  13. #define msi map<string, int>
  14. #define mci map<char, int>
  15. #define qc queue<char>
  16. #define qi queue<int>
  17. #define qll queue<ll>
  18. using namespace std;
  19.  
  20. int main(){
  21.     ios_base::sync_with_stdio(false);
  22.     cin.tie(NULL);
  23.     int t;
  24.     cin >> t;
  25.     while(t--){
  26.         int n;
  27.         cin >> n;
  28.         vi b(n), v;
  29.         mii m;
  30.         map<int, vector<int>> a;
  31.         for(int i = 0; i < n; i++){
  32.             int x;
  33.             cin >> x;
  34.             m[x] = i;
  35.             v.pb(x);
  36.         }
  37.  
  38.         a[0].pb(n);
  39.         int i = 0;
  40.         set<int> s;
  41.         s.insert(n);
  42.         while(s.size() < n){
  43.             for(int k = 0; k < a[i].size(); k++){
  44.                 int r = a[i][k];
  45.                 int m1 = 0, m2 = 0;
  46.                 for(int j = m[a[i][k]]-1; j >= 0; j--){
  47.                     if(s.find(v[j]) != s.end()){
  48.                         break;
  49.                     }
  50.                     if(m1 < v[j]){
  51.                         m1 = v[j];
  52.                     }
  53.                 }
  54.                 for(int j = m[a[i][k]]+1; j < n; j++){
  55.                     if(s.find(v[j]) != s.end()){
  56.                         break;
  57.                     }
  58.                     if(m2 < v[j]){
  59.                         m2 = v[j];
  60.                     }
  61.                 }
  62.                
  63.                 if(m1 > 0){
  64.                     s.insert(m1);
  65.                     a[i+1].pb(m1);
  66.                 }
  67.                 if(m2 > 0){
  68.                     s.insert(m2);
  69.                     a[i+1].pb(m2);
  70.                 }
  71.             }
  72.             i++;
  73.         }
  74.         for(auto i = a.begin(); i != a.end(); i++){
  75.             for(int j = 0; j < (i->second).size(); j++){
  76.                 b[m[(i->second)[j]]] = i->first;
  77.             }
  78.         }
  79.         for(int i = 0; i < n; i++){
  80.             cout << b[i] << " ";
  81.         }
  82.         cout << "\n";
  83.     }
  84.     return 0;
  85. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement