Submission #1141062

#TimeUsernameProblemLanguageResultExecution timeMemory
1141062domblyArt Collections (BOI22_art)C++20
50 / 100
371 ms440 KiB
#include <bits/stdc++.h>
#include "art.h"
#define pb push_back

using namespace std;

int inv;
vector<int>order;

vector<int> Solve(int l,int r) {
    if(l == r) return {l};
    int mid = l + r >> 1;
    vector<int>L = Solve(l,mid);
    vector<int>R = Solve(mid + 1,r);
    int ptr1 = 0,ptr2 = 0,n1 = L.size(),n2 = R.size();
    vector<int>v;
    while(ptr1 < n1 || ptr2 < n2) {
        if(ptr1 == n1) {
            v.pb(R[ptr2++]);
        }else if(ptr2 == n2) {
            v.pb(L[ptr1++]);
        }else {
            assert(L[ptr1] - 1 >= 0 && L[ptr1] - 1 <= r);
            assert(R[ptr2] - 1 >= 0 && R[ptr2] - 1 <= r);
            swap(order[L[ptr1] - 1],order[R[ptr2] - 1]);
            int inv2 = publish(order);
            swap(order[L[ptr1] - 1],order[R[ptr2] - 1]);
            if(inv2 < inv) v.pb(R[ptr2++]);
            else v.pb(L[ptr1++]);
        }
    }
    return v;
}

void solve(int N) {
    for(int i = 1; i <= N; i++) order.pb(i);
    inv = publish(order);
    answer(Solve(1,N));
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...