Submission #1188906

#TimeUsernameProblemLanguageResultExecution timeMemory
1188906lizaArt Collections (BOI22_art)C++20
35 / 100
91 ms420 KiB
#include "art.h"
#include <bits/stdc++.h>

using namespace std;

vector<int> order;
int r1;
int n;
bool cmp(int a, int b)
{
    vector<int> ve;
    ve.push_back(a);
    ve.push_back(b);
    for(int i = 1; i <= n; i++)
    {
        if(i!=a && i!= b) ve.push_back(i);
    }
    int x = publish(ve);
    if(x==0) answer(ve);
    swap(ve[0], ve[1]);
    int y = publish(ve);
    if(y==0) answer(ve);
    return x < y;
}

void _merge(int l, int m, int r)
{
    int n1 = m-l+1;
    int n2 = r-m;

    vector<int> L(n1), R(n2);
    for(int i = 0; i < n1; i++) L[i] = order[l+i];
    for(int i = 0; i < n2; i++) R[i] = order[m+1+i];

    int i = 0, j = 0;
    int k = l;
    while(i < n1 && j < n2)
    {
        if(cmp(L[i], R[j]))
        {
            order[k] = L[i];
            i++;
        }
        else
        {
            order[k]=R[j];
            j++;
        }
        k++;
    }
    while(i < n1)
    {
        order[k] = L[i];
        i++;
        k++;
    }
    while(j < n2)
    {
        order[k] = R[j];
        j++;
        k++;
    }

}

void ms(int l, int r)
{
    if(l >= r) return;
    int m = l+(r-l)/2;
    ms(l, m);
    ms(m+1, r);
    _merge(l, m, r);
}


void solve(int N) {

    for (int i = 1; i <= N; i++)
    {
        order.push_back(i);
    }
    n= N;
    ms(0, N-1);
    answer(order);


}


//publish
//answer
#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...