제출 #1141244

#제출 시각아이디문제언어결과실행 시간메모리
1141244altern23Arranging Shoes (IOI19_shoes)C++20
30 / 100
39 ms13740 KiB
#include "shoes.h"
#include <bits/stdc++.h>
using namespace std;
#define ll long long

struct fenwick{
    ll n;
    vector<ll>bit;
    fenwick(ll _n = 0) : n(_n), bit(n + 5) {}
 
    void upd(ll idx, ll val){
		idx++;
        for(int i = idx; i <= n; i += i & -i) bit[i] += val;
    }
    
    ll get(ll idx){
		idx++;
        ll ans = 0;
        for(int i = idx; i >= 1; i -= i & -i) ans += bit[i];
        return ans;
    }
    
    ll query(ll l, ll r){
        if(l > r) return 0;
        return get(r) - get(l - 1);
    }
};


long long count_swaps(vector<int> s) {
	ll n = s.size();
	vector<pair<ll, ll>> isi[n + 5];
	for(int i = 0; i < n; i++){
		isi[abs(s[i])].push_back({i, s[i]});
	}	

	fenwick bit(n);
	vector<ll> a(n + 5);

	ll ans = 0;
	vector<pair<ll, ll>> segs;
	
	for(ll i = 1; i <= n; i++){
		deque<ll> pos, neg;
		ll nxt = 0;
		for(auto [idx, val] : isi[i]){
			if(val < 0){
				if(!pos.empty()){
					a[idx] = nxt;
					a[pos.front()] = nxt + 1;
					nxt += 2;
					pos.pop_front();
				}
				else{
					neg.push_back(idx);
				}
			}
			else{
				if(!neg.empty()){
					a[idx] = nxt + 1;
					a[neg.front()] = nxt;
					nxt += 2;
					neg.pop_front();
				}
				else{
					pos.push_back(idx);
				}
			}
		}
	}

	for(int i = 0; i < n; i++){
		ans += bit.query(a[i] + 1, n - 1);
		bit.upd(a[i], 1);
	}
	
	return ans;
}
#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...