Submission #1200971

#TimeUsernameProblemLanguageResultExecution timeMemory
1200971nvc2k8Arranging Shoes (IOI19_shoes)C++20
45 / 100
30 ms9664 KiB
#include <bits/stdc++.h>
#include "shoes.h"
#define TASK "shoes"
#define INT_LIM (int) 2147483647
#define LL_LIM (long long) 9223372036854775807
#define endl '\n'
#define mp make_pair
#define pb push_back
#define fi first
#define se second
#define BIT(i,x) (((i)>>(x))&1)
#define FOR(i,a,b) for(int i = (a); i<=(b); i++)
#define FORD(i,a,b) for(int i = (a); i>=(b); i--)
#define ll long long
#define pii pair<int,int>
using namespace std;
///------------------------------------------///
int n;
vector<int> lshoes;
vector<int> rshoes[100005];
int ptr[100005];
int a[200005];
int f[200005];

void update(int u, int delta)
{
    for (int i = u; i<=n; i+=(i&(-i))) f[i]+=delta;
}

int get(int u)
{
    int ret = 0;
    for (int i = u; i>0; i-=(i&(-i))) ret+= f[i];
    return ret;
}

ll count_swaps(vector<int> s)
{
    n = s.size();
    FOR(i, 0, n-1)
    {
        if (s[i]<0) lshoes.pb(i+1);
        else
        {
            rshoes[s[i]].pb(i+1);
        }
    }

    int cur = 0;
    for (auto i:lshoes)
    {
        a[i] = ++cur;
        int ss = -s[i-1];
        a[rshoes[ss][ptr[ss]++]] = ++cur;
    }

    ll ret = 0;

    FORD(i, n, 1)
    {
//        cout << a[i] << endl;
        ret+= (ll) get(a[i]);
        update(a[i], 1);
    }

    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...