Submission #1322477

#TimeUsernameProblemLanguageResultExecution timeMemory
1322477NValchanovArt Collections (BOI22_art)C++20
50 / 100
327 ms436 KiB
#include <vector>
#include "art.h"

using namespace std;

int n;
int p;
vector < int > a;
vector < int > tmp;
vector < int > ans;

bool cmp(int x, int y)
{
    vector < int > cur(n);

    for(int i = 0; i < n; i++)
    {
        cur[i] = i + 1;
    }

    swap(cur[x - 1], cur[y - 1]);

    int curp = publish(cur);

    return curp >= p;
}

void mergeSort(int left, int right)
{
    if(left == right)
        return;

    int mid = left + (right - left) / 2;

    mergeSort(left, mid);
    mergeSort(mid + 1, right);

    for(int i = left; i <= right; i++)
    {
        tmp[i] = a[i];
    }

    int ptrl = left;
    int ptrr = mid + 1;
    int ptr = left;

    while(ptrl <= mid && ptrr <= right)
    {
        if(cmp(tmp[ptrl], tmp[ptrr]))
        {
            a[ptr++] = tmp[ptrl++];
        }
        else
        {
            a[ptr++] = tmp[ptrr++];
        }
    }

    while(ptrl <= mid)
        a[ptr++] = tmp[ptrl++];
    
    while(ptrr <= right)
        a[ptr++] = tmp[ptrr++];
}

void solve(int N) 
{
    n = N;
    a.resize(n);
    tmp.resize(n);
    ans.resize(n);

    for(int i = 0; i < n; i++)
    {
        a[i] = i + 1;
    }

    p = publish(a);

    mergeSort(0, n - 1);

    for(int i = 0; i < n; i++)
    {
        ans[i] = a[i];
    }

    answer(ans);
}
#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...