Submission #911351

#TimeUsernameProblemLanguageResultExecution timeMemory
911351vjudge1Arranging Shoes (IOI19_shoes)C++17
100 / 100
695 ms44196 KiB
    #include "shoes.h"
    #include <bits/stdc++.h>
    using namespace std;
    using ll = long long;
    #define F(i, l, r) for (ll i = l; i < (r); ++i)
    using vl = vector<ll>;
    #define A(a) (a).begin(), (a).end()
     
     
    //GCC extensions
    #include <bits/extc++.h>
    using namespace __gnu_cxx;
    using namespace __gnu_pbds;
     
    // order stats tree
    // find_by_order(i) returns ptr
    // order_of_key(key) return int
    typedef tree<ll, null_type, less<ll>,
    rb_tree_tag, tree_order_statistics_node_update> set_t;
     
    long long count_swaps(std::vector<int> s) {
        ll n = s.size()/2;
     
        map<ll, set<ll>> positions;
        set_t active_nodes;
        for(int i=0;i<s.size();i++) {
            positions[s[i]].insert(i);
            active_nodes.insert(i);
        }
        ll ans = 0;
        
        for(int i=0;i<n;i++) {
            auto si = *active_nodes.begin();
            auto iterator = positions[-s[si]].begin();
            positions[s[si]].erase(si);
            positions[-s[si]].erase(iterator);
            auto it = *iterator;
            
            if (s[si] < 0) {
                ans += active_nodes.order_of_key(it) - 1;
            } else {
                ans += active_nodes.order_of_key(it) ;
            }
            active_nodes.erase(active_nodes.begin());
            active_nodes.erase(active_nodes.find(it));
        }
     
        return ans;
    }

Compilation message (stderr)

shoes.cpp: In function 'long long int count_swaps(std::vector<int>)':
shoes.cpp:26:22: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   26 |         for(int i=0;i<s.size();i++) {
      |                     ~^~~~~~~~~
#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...