제출 #724020

#제출 시각아이디문제언어결과실행 시간메모리
724020sandry24Arranging Shoes (IOI19_shoes)C++17
100 / 100
519 ms148728 KiB
#include <bits/stdc++.h>
using namespace std;

//#pragma GCC optimize("O3,unroll-loops")
//#pragma GCC target("avx2,bmi,bmi2,lzcnt,popcnt")
typedef long long ll;
typedef vector<int> vi;
typedef pair<int, int> pi;
#define pb push_back
#define mp make_pair
#define f first
#define s second

const int sz = 200005;
ll BIT[sz];

void add(ll x, ll delta){
    for(; x < sz; x += x & -x)
        BIT[x] += delta;
}

ll sum(ll x){
    ll res = 0;
    for(; x > 0; x -= x & -x)
        res += BIT[x];
    return res;
}

ll count_swaps(vi s){
    map<int, deque<int>> m;
    int n = s.size();
    vector<bool> marked(n+5);
    for(int i = 0; i < n; i++)
        m[s[i]].pb(i);
    ll ans = 0;
    for(int i = 0; i < n; i++){
        if(marked[i])
            continue;
        int ind = m[-s[i]].front();
        m[-s[i]].pop_front();
        m[s[i]].pop_front();
        marked[i] = marked[ind] = 1;
        //cerr << s[i] << ' ' << i << ' ' << ind << ' ' << sum(ind) << '\n';
        ans += (ind - i - 1) - (sum(ind) - sum(i));
        if(s[i] > 0)
            ans++;
        add(ind+1, 1);
        //cout << ans << '\n';
    }
    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...