Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <bits/stdc++.h>
- #define ll long long
- #define ull unsigned long long int
- #define ld long double
- #define pb push_back
- #define p_b pop_back
- #define si stack<int>
- #define sll stack<ll>
- #define sc stack<char>
- #define vi vector<int>
- #define vll vector<ll>
- #define mii map<int, int>
- #define msi map<string, int>
- #define mci map<char, int>
- #define qc queue<char>
- #define qi queue<int>
- #define qll queue<ll>
- using namespace std;
- int main(){
- ios_base::sync_with_stdio(false);
- cin.tie(NULL);
- int t;
- cin >> t;
- while(t--){
- int n;
- cin >> n;
- vi b(n), v;
- mii m;
- map<int, vector<int>> a;
- for(int i = 0; i < n; i++){
- int x;
- cin >> x;
- m[x] = i;
- v.pb(x);
- }
- a[0].pb(n);
- int i = 0;
- set<int> s;
- s.insert(n);
- while(s.size() < n){
- for(int k = 0; k < a[i].size(); k++){
- int r = a[i][k];
- int m1 = 0, m2 = 0;
- for(int j = m[a[i][k]]-1; j >= 0; j--){
- if(s.find(v[j]) != s.end()){
- break;
- }
- if(m1 < v[j]){
- m1 = v[j];
- }
- }
- for(int j = m[a[i][k]]+1; j < n; j++){
- if(s.find(v[j]) != s.end()){
- break;
- }
- if(m2 < v[j]){
- m2 = v[j];
- }
- }
- if(m1 > 0){
- s.insert(m1);
- a[i+1].pb(m1);
- }
- if(m2 > 0){
- s.insert(m2);
- a[i+1].pb(m2);
- }
- }
- i++;
- }
- for(auto i = a.begin(); i != a.end(); i++){
- for(int j = 0; j < (i->second).size(); j++){
- b[m[(i->second)[j]]] = i->first;
- }
- }
- for(int i = 0; i < n; i++){
- cout << b[i] << " ";
- }
- cout << "\n";
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement