Submission #721666

#TimeUsernameProblemLanguageResultExecution timeMemory
721666Mr_HusanboyArt Collections (BOI22_art)C++17
35 / 100
191 ms976 KiB
#include "art.h"
#include<bits/stdc++.h>
 
#define all(a) (a).begin(), (a).end()
template<typename T>
int len(T &a){
    return a.size();
}
 
using namespace std;

vector<int> v;
vector<vector<int>> comp;


vector<int> temp;

void sort(int l, int r){
    auto greater = [&](int i, int j)->int{
        //cout << l << ' ' << r << endl;
        if(~comp[v[i]][v[j]]) return comp[v[i]][v[j]];
        int y = publish(v);
        if(!y){
            answer(v);
        }
        swap(v[i], v[j]);
        int x = publish(v);
        if(!x){
            answer(v);
        }
        swap(v[i], v[j]);
        comp[v[i]][v[j]] = y > x; comp[v[j]][v[i]] = y < x;
        return comp[v[i]][v[j]];
    };
    if(l == r) return;
    if(l == r - 1){
        if(greater(l, r) == 1) swap(v[l], v[r]);
        return;
    }
    int m = (l + r) >> 1;
    sort(l, m);
    sort(m + 1, r);
    int cur = l;
    for(int i = l, j = m + 1; i <= m || j <= r; i ++){
        while(j <= r && (i > m || greater(i, j) == 1)){
            temp[cur] = v[j]; cur ++; j ++;
        }
        if(i <= m)
        temp[cur] = v[i];
        cur ++;
    }
    for(int i = l; i <= r; i ++) v[i] = temp[i];
    return;
}

void solve(int n) {
    v.assign(n, 0);
    temp.resize(n);
    comp.assign(n + 1, vector<int>(n + 1, -1));
    iota(all(v), 1);
    sort(0, n - 1);
    answer(v);
}

Compilation message (stderr)

interface.cpp: In function 'int publish(std::vector<int>)':
interface.cpp:20:17: warning: comparison of integer expressions of different signedness: 'std::vector<int>::size_type' {aka 'long unsigned int'} and 'int' [-Wsign-compare]
   20 |     if(v.size() != N) {
      |        ~~~~~~~~~^~~~
interface.cpp: In function 'void answer(std::vector<int>)':
interface.cpp:36:17: warning: comparison of integer expressions of different signedness: 'std::vector<int>::size_type' {aka 'long unsigned int'} and 'int' [-Wsign-compare]
   36 |     if(v.size() != 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...