제출 #1242685

#제출 시각아이디문제언어결과실행 시간메모리
1242685superomegoArranging Shoes (IOI19_shoes)C++20
50 / 100
1095 ms24996 KiB
#include <bits/stdc++.h>
using namespace std;

long long count_swaps(vector<int> S){
    
    long long n = S.size(), ret = 0;
    map<int, pair<vector<long long>, vector<long long>>> v;
    
    set<tuple<long long, long long, long long>> s;
    set<pair<long long, long long>> ts;
    
    for(int i = 0; i < S.size(); ++i){
        
        if(v.find(abs(S[i])) == v.end()) v[abs(S[i])] = {vector<long long>(), vector<long long>()};
        
        if(S[i] < 0) v[-S[i]].first.push_back(i);
        else v[S[i]].second.push_back(i);
    }
    for(auto &[k, w] : v){
        
        auto it1 = w.first.rbegin(), it2 = w.second.rbegin();
        while(it1 != w.first.rend()){
            
            if((*it1) > (*it2)) s.insert({(*it2), (*it1), 0});
            else s.insert({(*it1), (*it2), -1});
            it1++; it2++;
            
        }
        
    }
    
    for(auto it = s.rbegin(); it != s.rend(); ++it){
        
        if(ts.empty()){
            ret += get<1>(*it) + get<2>(*it) - get<0>(*it);
            ts.insert({get<1>(*it) + get<2>(*it), get<0>(*it)});
        }
        else{
            
            long long val = 0;
            
            auto jt = ts.lower_bound({get<1>(*it), 0});
            while(jt != ts.end()){
                
                if((*jt).second < get<1>(*it)) val++;
                jt++;
                
            } 

            ret += get<1>(*it) + get<2>(*it) - get<0>(*it) - val;
            ts.insert({get<1>(*it) + get<2>(*it), get<0>(*it)});
        }
        
    }
    
    return ret;
   
}
#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...