제출 #1328508

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

#pragma GCC optimize("Ofast")
#pragma GCC optimize("unroll-loops")

typedef long long ll;
const ll INF = 1e18;
const ll MOD = 1e9 + 7;
const ll MAXN = 1e6 + 5;
const ll LOG = 30;
#define vll vector <ll>
#define pll pair <ll, ll>
#define fi first
#define se second
#define endl '\n'
#define debug(x) cout << #x << " " << (x) << endl;

#include "shoes.h"

ll n;
vector <vll> a (MAXN);
ll b [MAXN], c [MAXN];
vector <pll> v;
ll ans = 0;


struct fenwickTree {
    vll bit; ll sz;
    fenwickTree(ll sz) : sz(sz), bit(sz+5) {}
    ll lso(ll x){return x & -x;}
    void add(ll idx, ll v){
        for(ll i = idx; i <= sz; i += lso(i)) bit[i] += v;
    }
    ll get(ll idx){
        if(idx == -1) return 0;
        ll ret = 0;
        for(ll i = idx; i >= 1; i -= lso(i)) ret += bit[i];
        return ret;
    }
    ll sum(ll l, ll r){
        return get(r) - get(l-1);
    }
} ft (MAXN);

long long count_swaps(std::vector<int> s) {
	n = s.size();
	ll nw = 0;
	for(ll i = 0; i < n; i++){
		if(s[i] < 0){
			a[-s[i]].push_back(++nw);
			b[i] = nw*2;
		}
	}
	for(ll i = 0; i < n; i++){
		if(s[i] > 0){
			b[i] = a[s[i]][c[s[i]]]*2+1;
			c[s[i]]++;
		}
	}
	for(ll i = 0; i < n; i++){
		ft.add(b[i], 1);
		ans += ft.sum(b[i]+1, MAXN);
	}
	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...