Submission #572929

#TimeUsernameProblemLanguageResultExecution timeMemory
572929MohamedFaresNebiliArt Collections (BOI22_art)C++17
20 / 100
130 ms640 KiB
#include <bits/stdc++.h>
#include "art.h"
#include <ext/pb_ds/assoc_container.hpp>

        using namespace std;
        using namespace __gnu_pbds;

        using ll = long long;
        using ii = pair<int, int>;
        using vi = vector<int>;

        #define pb push_back
        #define pp pop_back
        #define ff first
        #define ss second
        #define lb lower_bound
        #define all(x) (x).begin(), (x).end()

        typedef tree<int, null_type, less<int>, rb_tree_tag,
            tree_order_statistics_node_update> indexed_set;

        void solve(int N) {
            set<int> adj[N + 1], rev[N + 1]; int income[N + 1]{0};
            for(int l = 1; l <= N; l++) {
                vector<int> R;
                for(int i = 1; i <= N; i++) {
                    if(i == l) continue;
                    R.pb(i);
                }
                R.pb(l); int k = publish(R), p = k;
                for(int i = N - 1; i > 0; i--) {
                    swap(R[i], R[i - 1]);
                    if(adj[l].count(R[i])) {
                        p--; rev[R[i]].insert(l);
                        continue;
                    }
                    if(rev[l].count(R[i])) {
                        p++; adj[R[i]].insert(l);
                        continue;
                    }
                    k = publish(R);
                    if(k < p) {
                        adj[l].insert(R[i]);
                        rev[R[i]].insert(l);
                    }
                    else {
                        adj[R[i]].insert(l);
                        rev[l].insert(R[i]);
                    }
                    p = k;
                }
            }
            bool vis[N + 1]{0}; vector<int> R; queue<int> q;
            for(int l = 1; l <= N; l++)
                income[l] = adj[l].size();
            for(int l = 1; l <= N; l++) {
                if(income[l]) continue;
                q.push(l); vis[l] = 1;
            }

            while(!q.empty()) {
                int a = q.front(); q.pop(); R.pb(a);
                for(auto u : rev[a]) {
                    income[u] --;
                    if(vis[u] || income[u] != 0) continue;
                    vis[u] = 1; q.push(u);
                }
            }
            reverse(all(R)); answer(R);
        }

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...